【问题标题】:Coding error prevents NSMutableArray from returning data after ALAssetsLibrary query编码错误阻止 NSMutableArray 在 ALAssetsLibrary 查询后返回数据
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 2020-10-17
    • 2012-07-12
    • 1970-01-01
    相关资源
    最近更新 更多