【发布时间】:2014-11-28 17:59:35
【问题描述】:
我正在尝试使用 iOS 8 中的新 PHAssetChangeRequest 类将一大批照片保存到照片库中。问题是,看起来保存照片的守护进程本身意外崩溃,数量适中照片(我正在尝试大约 500 张)。任何人都知道如何绕过这个限制?这是守护进程本身的内存使用问题吗?这也可能是更改块的超时限制,因为在下面的前 2 个日志语句之间存在一个 not 微不足道的差距。
assetsd 守护进程不应该已经考虑了这个用例吗,因为新照片框架中的 超级复杂 模型和设计应该能够处理类似的事情?文档示例本身展示了保存照片的能力。
这是我的代码示例:
[[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);
}
}];
这就是我的输出:
... 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.)
我什至尝试了PHPhotoLibrary中的同步performChangesAndWait方法,但它也有同样的问题。
我对建议/想法持开放态度,我被困住了! :(
【问题讨论】:
-
我遇到了类似的问题。我保存了 4 张图像,它可以工作,但如果我再次尝试保存 4 张图像来替换现有图像,我会收到此错误。当我想出解决方案时,我会回复你
-
@Aggressor 我真的看不到“替换”照片库中现有照片的方法。我想你可以删除并重新添加它们。
-
这个错误似乎来自内存过载。我减小了 UIImage 的文件大小并解决了问题。如果您需要查看,我可以发布代码。
-
嗯,不,对减少文件大小的代码不感兴趣。我需要保存原始照片,而不是调整大小。我会想出一种不同的方法。
-
我可以保证它的内存超出错误。您是否尝试过一次只做几个然后清除缓存?就像将其分成 10 个批次并每次清除缓存一样。你的 didRecieveMemory 函数中有 println 吗?如果您运行所有 500 个,内存功能会在多少时触发?你能在 didRecieveMemory 警告中放一个清除缓存调用吗?
标签: ios ios8 photosframework