2012-04-18 16 views
1

私はこれに似た以前の質問を(回答なしで)尋ねましたが、私はその問題についてもっと知っていましたので、私は新しい質問に言い換えることにしました。私はこれが大丈夫だと思う。ALAssetLibraryを変更しても機能する方法でALAssetを保存する方法はありますか?

本質的に、カメラロール/写真ライブラリからの写真、特に私のアプリにいくつかのALAssetsを保存する必要があります。

ユーザーがアプリから離れて写真を撮ったり写真を削除すると、保存したALAssetsが無効になります。

これを回避する手段はありますか? ALAssetLibraryが自分自身を再索引付けする際に生き残る写真ID、パス、その他何でも保存できるALAssetsのデータはありますか?

ありがとうございました!

答えて

7

PhotoLibraryを変更すると、すべてのAssetLibraryオブジェクトが無効になります。 あなたが何をする必要がありますか:

1)ユーザーがアプリケーションから切り替える前に、ALAssetsLibraryChangedNotificationのオブザーバーを登録します。あなたは回避する必要がiOSのバグがあることに注意してください:http://www.openradar.me/10484334

2)アプリのうち、ユーザスイッチを使用すると、メソッドを使用して、後で取得したいALAssetsのURLを保存する前に:

[assetObject valueForPropery: ALAssetPropertyURLs]; 

3)ユーザーがあなたのアプリに戻って(変更が行われたとき)、あなたはオブザーバーを呼び出す必要があります。 UIにALAssetオブジェクトが表示されている場合は、AssetsLibraryの再発行をトリガーしてGUIを更新する必要があります(そうしないと、GUIは無効なALAssetsObjectsに反映されます)。 assetURLについては

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

は、先ほど保存した値を渡す:

4)あなたが前のURLを保存したことを、あなたのALAsset-オブジェクトのいずれかを取得するには、メソッドを使用します。

乾杯、

ヘンドリック

+0

ありがとうございました!これは本当にうまくいった。しかし、明確化:アプリがバックグラウンドにある場合、アプリはALAssetsLibraryChangedNotificationを受け取りますか? – kurisukun

+1

アプリはバックグラウンドで通知を受信しません。しかし、写真ライブラリが変更された場合、アプリがバックグラウンドにある間に、アプリがフォアグラウンドに戻ったらすぐに(1回または複数回)通知が届きます。 – holtmann

関連する問題