2012-04-18 59 views
1

我问了一个类似于这个问题的先前的问题(没有回复),但我对这个问题有了更多的了解,所以我决定用一个新的问题来解释它。我希望这是好的。有没有什么办法以尽可能改变ALAssetLibrary的方式保存ALAsset?

本质上,我需要在我的应用程序中存储一些ALAssets,特别是来自相机胶卷/照片库的照片。

如果用户切换出应用程序,然后拍摄一些照片或删除一些照片,那么我存储的ALAssets将失效。

有没有办法解决这个问题?是否有任何可以存储的ALAssets数据,例如照片ID,路径或任何可以“存活”ALAssetLibrary重新索引本身的内容?

谢谢!

回答

7

当PhotoLibrary更改时,所有AssetLibrary对象变为无效。 需要做什么:

1)在用户切换出应用程序之前,注册ALAssetsLibraryChangedNotification的观察者。请注意,有一个iOS的错误,你需要解决:http://www.openradar.me/10484334

2)用户切换出的应用程序的保存要在以后检索使用方法的ALAssets的网址前:

[assetObject valueForPropery: ALAssetPropertyURLs]; 

3)当用户切换回你的应用程序(和更改完成)时,应该调用观察者。如果您的UI显示任何ALAsset对象,则应该触发AssetsLibrary的重新枚举并更新您的GUI(否则您的GUI会反映为无效的ALAssetsObjects)。

4)检索任何您的ALAsset对象的,你保存的网址之前,使用方法:

[assetsLibraryInstance assetForURL:(NSURL *)assetURL resultBlock:(ALAssetsLibraryAssetForURLResultBlock)resultBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock] 

对于assetURL传给你先前保存的值。

干杯,

亨德里克

+0

谢谢!这确实有效。然而,澄清:如果应用程序在后台,应用程序是否仍会收到ALAssetsLibraryChangedNotification? – kurisukun 2012-04-20 01:50:42

+1

当应用程序在后台时,它不会收到通知。但是,如果在照片库发生任何更改时,应用程序位于后台,则只要应用程序再次处于前台,您就会收到通知(一次或多次)。 – holtmann 2012-04-20 19:31:04

相关问题