Ios6 编码错误阻止NSMutableArray在库查询后返回数据

Ios6 编码错误阻止NSMutableArray在库查询后返回数据,ios6,nsmutablearray,enumerate,Ios6,Nsmutablearray,Enumerate,我编写了以下代码(iOS 6),试图使用ALAssetLibrary从相册(albumName)恢复照片列表。代码经过编译,根据静态分析器,我没有内存泄漏或其他问题,只有NSLog语句。代码成功地找到了相册,如果我在循环中中断,我可以看到数据正在写入字典。但它们不是作为阵列中的对象放置的 我确信这是我的疏忽,但我无法发现。感谢任何帮助,也许正确的答案会帮助其他人。这对我来说太难了 提前谢谢 特遣部队雷德菲尔德 (NSMutableArray)retrieveImageNames:(NSStri

我编写了以下代码(iOS 6),试图使用ALAssetLibrary从相册(albumName)恢复照片列表。代码经过编译,根据静态分析器,我没有内存泄漏或其他问题,只有NSLog语句。代码成功地找到了相册,如果我在循环中中断,我可以看到数据正在写入字典。但它们不是作为阵列中的对象放置的

我确信这是我的疏忽,但我无法发现。感谢任何帮助,也许正确的答案会帮助其他人。这对我来说太难了

提前谢谢

特遣部队雷德菲尔德

  • (NSMutableArray)retrieveImageNames:(NSString)albumName {
AlassetLibrary*AssetLibrary=[[AlassetLibrary alloc]init]; NSMutableArray*AssetGroup=[[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];

}enumerateGroupsWithTypes是一个异步调用。在数组被填充之前,您已经返回了它。

澄清一下:当在循环中调用NSLog时,它会返回正确的值,但是当在应该进行返回的底部时,它会返回零计数,并且数组是空的。您好--我仍在努力解决这个问题。一个观察结果是,如果我在分配数组之后,在调用第一个块之前,用一个伪值(字符串或其他什么)填充数组,那么它将作为有效字符串从方法返回。但是如果我在块中填充它(例如,在枚举AssetLibrary之后),它将返回为空。任何线索感谢。。。