UIManagedDocument の一部として、plist といくつかのバイナリ ファイル (画像としましょう) を保存しようとしています。バイナリ ファイルの名前は Core Data の属性であり、それらを列挙する必要はありません。関連するエンティティを表示するときに適切なファイルにアクセスするだけです。
私が持ちたいファイル構造は次のとおりです。
- <File yyyyMMdd-HHmmss>.extdoc
- StoreContent
- persistentStore
- AdditionalContent
- ListStatus.plist (used to store per document defaults)
- Images
- uuid1.png
- uuid2.png
- ...
- uuidn.png
これまでのところ、UIManagedDocument ファイル パッケージに追加のコンテンツを保存するにはどうすればよいですか?の指示に従って問題なく実行できました。、しかし、バイナリファイルを追加しようとすると、方法がわからないことがいくつかあります。
- URL /the/path/File yyyyMMdd-HHmmss.extdoc/ AdditionalContent (readAdditionalContentFromURL:error: で提供されるデフォルトの URL) を NSFileWrapperとして扱うべきですか? URL のみを使用する場合と比較して、利点/欠点はありますか? plist はファイル ラッパー アクセサーと NSCoder (推測) を使用して読み取る必要があるため、ファイル ラッパーを使用するのはより複雑だと思います。 objectForKey を持つノード (私は推測します)。しかし、Apple の Document-Based Apps Programming Guide for iOS では、NSData または NSFileWrapper の代わりにカスタム フォーマットに関して、「コードは UIDocument が行うことを複製する必要があることに注意してください。そのため、より複雑になり、エラーの可能性が高くなることに対処する必要があります。「私はこれを誤解していますか?
- ドキュメントごとのデフォルトはプロパティとして宣言されます。セッターは、plist をマップしてドキュメントを更新済みとしてマークする NSDictionary を変更し、ゲッターは適切なキーを使用して辞書にアクセスします。バイナリ ファイルの読み取り/書き込み機能を公開するにはどうすればよいですか? UIManagedDocument のサブクラスにメソッドを追加する必要がありますか? - (void)writeImage:(NSString*)uuid; および -(UIImage *)readImage:(NSString *)uuid; ドキュメントが保存されるまで、このデータをメモリに保持する必要がありますか? どのように?
- NSFileWrapper を使用すると仮定すると、iCloud でこのドキュメントを使用する場合、ファイル コーディネーターをファイル ラッパーで使用する必要がありますか? もしそうなら、どのように?
各質問のソース コードは大歓迎です。ありがとうございました。
PS: Core Data 内にバイナリ データを保存できることは知っていますが、その解決策には満足できません。他の理由の中でも特に、デスクトップ アプリを作成する場合は、NSImage と互換性のないシリアル化されたバージョンの UIImage である画像ファイルの PNG データを保存します。