1

を使用して写真ライブラリにいくつかの写真を書き込みUIImageWriteToSavedPhotosAlbum()、同時にと フレンドALAssetsGroupSavedPhotosを使用してこのアセット グループ ( )の内容を表示しenumerateAssetsUsingBlock:ます。グループを列挙することによって返されるアセットが、一種の「無効」になることがあります。これは、アセットがまだメモリ内にあるにもかかわらず、defaultRepresentation呼び出しが を返すことを意味します。nil

UIImageWriteToSavedPhotosAlbum()これは、フォト ライブラリが呼び出しによって変更された後に発生するように見えることに気付きました。これは文書化された動作ですか?どうすれば防ぐことができますか?アセットの再読み込みは、ユーザーが既に UI のどこかでアセットを操作している可能性があるため、実行可能なオプションではありません。

4

1 に答える 1

6

これは残念なことですが、文書化された動作です。参考のために:

"ALAssetsLibraryChangedNotificationデータを使用しているアプリの下からアセットライブラリのコンテンツが変更されたときに送信されます。この通知を受け取ったら、キャッシュされた情報を破棄し、アセットライブラリを再度クエリする必要があります。ALAsset、ALAssetsGroup、または、通知の処理が終了した後に参照しているALAssetRepresentationオブジェクト。」

したがって、あなたがしなければならないことは、のオブザーバーを登録することですALAssetsLibraryChangedNotification。(iOS 5.Xでは、この通知に関してバグがあります。OpenRadarを参照してください)通知を受け取ったら、すべてのグループとアセットを再列挙する必要があります。現時点では他に方法はありません。これはGUIの観点からは非常に残念なことであり、Appleが将来このメカニズムを改善することを期待できます。

乾杯、

ヘンドリック

于 2012-06-01T12:37:20.193 に答える