【发布时间】:2013-08-27 19:14:41
【问题描述】:
我编写了以下代码 (iOS 6) 来尝试使用 ALAssetLibrary 从相册 (albumName) 中恢复照片列表。代码编译并根据静态分析器我没有内存泄漏或其他问题,但 NSLog 语句。代码成功找到相册,如果我在循环内中断,我可以看到数据正在写入字典。但它们并没有被放置为数组中的对象!
我确信这是我的疏忽,但我无法发现它。任何帮助表示赞赏,也许正确的答案会帮助其他人。 AlAssets 对我来说一直很困难!
提前致谢
特遣部队雷德菲尔德
- (NSMutableArray )retrieveImageNames: (NSString)albumName {
ALAssetsLibrary* assetsLibrary = [[ALAssetsLibrary alloc] init]; NSMutableArray*assetGroups = [[NSMutableArray alloc] init];
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop)
{
if (group)
{
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
[group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop)
{
if (asset)
{
//compare the names of the albums
if ([albumName compare: [group valueForProperty:ALAssetsGroupPropertyName]]==NSOrderedSame)
{
NSMutableDictionary *workingDictionary = [[NSMutableDictionary alloc] init] ;
[workingDictionary setObject:[asset valueForProperty:ALAssetPropertyType] forKey:@"UIImagePickerControllerMediaType"];
[workingDictionary setObject:[UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]] forKey:@"UIImagePickerControllerOriginalImage"];
[workingDictionary setObject:[[asset valueForProperty:ALAssetPropertyURLs] valueForKey:[[[asset valueForProperty:ALAssetPropertyURLs] allKeys] objectAtIndex:0]] forKey:@"UIImagePickerControllerReferenceURL"];
[assetGroups addObject:workingDictionary];
//If I place the log here I get data
//NSString * temp = [NSString stringWithFormat:@"%d", [assetGroups count]];
//NSLog(@"%@",temp);
[workingDictionary release];
}
}
}];
}
} failureBlock:^(NSError *error)
{
NSLog(@"error enumerating AssetLibrary groups %@\n", error);
}];
NSString * temp = [NSString stringWithFormat:@"%d", [assetGroups count]];
NSLog(@"%@",temp);
return assetGroups;
[assetsLibrary release];
[assetGroups release];
}
【问题讨论】:
-
澄清一下:NSLog 在循环内调用时返回正确的值,但在应该返回的底部时,计数返回零,并且数组为空。
-
嗨——我还在为此苦苦挣扎。一个观察结果是,如果我在分配数组后立即用虚拟值(字符串或其他)填充数组,在调用第一个块之前,它将作为有效字符串从方法返回。但是,如果我在块中填充它(例如,在枚举 AssetLibrary 之后),它将返回为空。任何潜在客户表示赞赏...
标签: ios6 nsmutablearray enumerate