我之前问过一个类似的问题(没有回复),但我对这个问题了解得更多,所以我决定用一个新的来重新表述它。我希望这没问题。
本质上,我需要在我的应用程序中存储一些 ALAsset,特别是来自相机胶卷/照片库的照片。
如果用户退出应用程序,然后拍摄一些照片或删除一些照片,那么我存储的 ALAssets 将变得无效。
有没有办法解决?是否有任何来自 ALAssets 的数据可以存储,例如照片 ID、路径或任何东西,这些数据将在 ALAssetLibrary 重新索引自身时“存活”下来?
谢谢!
我之前问过一个类似的问题(没有回复),但我对这个问题了解得更多,所以我决定用一个新的来重新表述它。我希望这没问题。
本质上,我需要在我的应用程序中存储一些 ALAsset,特别是来自相机胶卷/照片库的照片。
如果用户退出应用程序,然后拍摄一些照片或删除一些照片,那么我存储的 ALAssets 将变得无效。
有没有办法解决?是否有任何来自 ALAssets 的数据可以存储,例如照片 ID、路径或任何东西,这些数据将在 ALAssetLibrary 重新索引自身时“存活”下来?
谢谢!
当 PhotoLibrary 发生变化时,所有 AssetLibrary 对象都会失效。你需要做什么:
1) 在用户退出应用之前,为 ALAssetsLibraryChangedNotification 注册一个观察者。请注意,您需要解决一个 iOS 错误:http ://www.openradar.me/10484334
2)在用户退出应用程序之前,使用以下方法保存您想要稍后检索的 ALAsset 的 URL:
[assetObject valueForPropery: ALAssetPropertyURLs];
3)当用户切换回您的应用程序(并完成更改)时,应该调用您的观察者。如果您的 UI 显示任何 ALAsset 对象,您应该触发 AssetsLibrary 的重新枚举并更新您的 GUI(否则您的 GUI 会反映到无效的 ALAssetsObjects)。
4) 要检索之前保存 URL 的任何 ALAsset-Objects,请使用以下方法:
[assetsLibraryInstance assetForURL:(NSURL *)assetURL resultBlock:(ALAssetsLibraryAssetForURLResultBlock)resultBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock]
对于assetURL,传递您之前保存的值。
干杯,
亨德里克