使用新的Photos框架保存大量照片?

Dhi*_*pta 13 ios ios8 photosframework

我正在尝试使用PHAssetChangeRequestiOS 8中的新类将大量照片保存到照片库中.问题是,看起来保存照片的守护程序本身会因为大量照片而意外崩溃(我是尝试约500).任何人都知道如何解决这个限制?这是守护进程本身的内存使用问题吗?它也可能是更改块的超时限制,因为在下面的前两个日志语句之间存在一个不小的差距.

assetsd守护进程不应该已经考虑到这个用例,因为类似这样的东西几乎就是新的Photos框架中的超复杂模型和设计应该能够处理的吗?文档示例本身展示了保存照片的功能.

这是我的代码示例:

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    for (NSURL * url in fileURLs) {
        PHAssetChangeRequest * assetReq = [PHAssetChangeRequest creationRequestForAssetFromImageAtFileURL:url];
    }
    NSLog(@"Added %d assets",fileURLs.count);
} completionHandler:^(BOOL success, NSError *error) {
     if (!success){
         NSLog(@"%@",error);
     }
}];
Run Code Online (Sandbox Code Playgroud)

这就是我的输出:

... Added 501 assets
... Connection to assetsd was interrupted or assetsd died
... Error Domain=NSCocoaErrorDomain Code=-1 "The operation couldn’t be completed. (Cocoa error -1.)
Run Code Online (Sandbox Code Playgroud)

我甚至尝试过同步performChangesAndWait方法,PHPhotoLibrary但它也有同样的问题.

我对建议/想法持开放态度,我被困住了!:(

小智 -1

这并不是这个问题的真正解决方案,但它是一种解决方法。您仍然可以使用旧的 ALAssetsLibrary 将文件成功保存到相机胶卷/照片应用程序。

ALAssetsLibrary* lib = [[ALAssetsLibrary alloc] init];
[lib writeImageDataToSavedPhotosAlbum:imageData metadata:nil
                      completionBlock:^(NSURL *assetURL, NSError *error)
{
    // start saving your next image
}];
Run Code Online (Sandbox Code Playgroud)

还建议在循环浏览要保存的所有照片时使用 AssetsLibrary 的单个实例。您可能还想等待第一个图像保存完成才能开始保存下一个图像。

如果需要,您可以将生成的 assetURL 转换为 PHAsset:

+ (PHFetchResult *)fetchAssetsWithALAssetURLs:(NSArray *)assetURLs
                                  options:(PHFetchOptions *)options
Run Code Online (Sandbox Code Playgroud)