2012-04-18 56 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

相關問題