【问题标题】:writeImageToSavedPhotosAlbum and enumerate images in the albumwriteImageToSavedPhotosAlbum 并枚举相册中的图片
【发布时间】:2013-06-04 21:40:55
【问题描述】:

我正在使用writeImageToSavedPhotosAlbum:orientation:completionBlock: 保存图像,没关系。然后我想要相册中的一组资产。

第一次刷新数组时,它不会计算新图像,而第二次调用它时效果很好。 为什么?我知道writeImageToSavedPhotosAlbum 启动了另一个线程,并且在保存操作完成后调用了 Block,不是吗?

这是我用来保存图像和刷新数组的代码:

[_album refresh];
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
[library writeImageToSavedPhotosAlbum:image
                             metadata:metadataAsMutable
                      completionBlock:^(NSURL *assetURL, NSError *error) {
                                  if (error) {
                                      NSLog(@"ERROR: the image failed to be written");
                                  }
                                  else {
                                      NSLog(@"PHOTO SAVED - assetURL: %@", assetURL);
                                  }
                                  [_album refresh];
                                  [_album refresh];
                                  [spinner stopAnimating];
                                  [self close];
                              }];

这是refresh 函数:

- (void)refresh {
    [_imgAssets removeAllObjects];
    if (_albumGroup) {
        [_albumGroup enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
            if(result == nil) {
                NSLog(@"done enumerating photos (%d)", [_imgAssets count]);
                return;
            }
            [_imgAssets addObject:result];
            //NSLog(@">> enumerating photos (%d)", [_imgAssets count]);
        }];
    }
}

这是我得到的:

2013-06-04 23:19:07.962 PhotInfo[4835:c07] done enumerating photos (29)
2013-06-04 23:19:08.041 PhotInfo[4835:c07] PHOTO SAVED - assetURL: assets-library://asset/asset.JPG?id=CDC2E97A-FF47-4A52-99E2-574037155D92&ext=JPG
2013-06-04 23:19:08.042 PhotInfo[4835:c07] done enumerating photos (29)
2013-06-04 23:19:08.044 PhotInfo[4835:c07] done enumerating photos (30)

此外,如果我将 3 个 refresh 中的第二个替换为

[_album performSelectorOnMainThread:@selector(refresh) withObject:nil waitUntilDone:YES];

它可能会或可能不会读取添加的图像。

问题出在哪里?

感谢您的帮助。

【问题讨论】:

  • 我不确定是否有问题,我认为在图像可用之前存在延迟。它确实很糟糕,我刚刚使用执行选择器解决了它。不是我喜欢...
  • 是的。事实上,我尝试过简单的等待,但要延迟多少?问题是我认为图像立即可用......

标签: ios ios6 alassetslibrary alasset


【解决方案1】:

我已解决在 ALAssetsLibraryChangedNotification 上设置观察者的问题。

【讨论】:

    猜你喜欢
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 2015-02-28
    • 2012-08-10
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多