6

sを使用UIManagedDocumentしてiCloudのファイルを管理しています。NSMetadataQueryそのように設定した後:

iCloudQuery = [[NSMetadataQuery alloc] init];
[iCloudQuery setSearchScopes:
    [NSArray arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]];
[iCloudQuery setPredicate:
    [NSPredicate predicateWithFormat:@"%K like %@", NSMetadataItemFSNameKey, @"DocumentMetadata.plist"]];

奇妙な問題が発生しています。ドキュメントにファイル拡張子(たとえば@"NewDocument2")やのようなパブリック拡張子を付けずに名前を.txt付けると、メタデータクエリがDocumentMetadata.plistファイルを正しく検出します。ただし、カスタムファイル拡張子を使用すると、クエリで何も検出されません...クエリの開始時や新しいドキュメントの追加時ではありません。

クエリはおそらくカスタムファイル拡張子を持つ私のドキュメントを見ていて、それが実際にはディレクトリ(とにかくファイルパッケージ)であることを認識していないように思われるので、DocumentMetadata.plistファイルを見つけるために内部を調べません。ただし、アプリのでカスタムUTIを宣言しましたinfo.plist

おそらく私は自分のUTIを間違って宣言しましたか?Appleのガイドライン( iOSおよびUniform Type Identifiersのドキュメントベースのアプリプログラミングガイドの概要)に従って作成しましたが、何かが間違っているようです。


編集:の「エクスポートされたUTI」の下でinfo.plist、私のタイプは「com.apple.package」に準拠するように設定されています。


編集: 私はまだこの問題に苦労しています。私は今のところファイル拡張子を使わないことでそれを回避しています。

カスタムファイル拡張子を使用する場合、iCloudメタデータクエリの結果を処理しており、DocumentMetadata.plistファイルは間違いなくファイルパッケージ内にありますが、メタデータクエリはそれを認識できません。クエリ結果を列挙すると、以下がログに出力されます。

<iCloud Container URL>/Documents/
<iCloud Container URL>/Documents/New%20Document.spdoc/
<iCloud Container URL>/Documents/New%20Document.spdoc/DocumentMetadata.plist
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/(A%20Document%20Being%20Saved%20By%20<AppName>%202)/
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/(A%20Document%20Being%20Saved%20By%20<AppName>)/
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/.persistentStore_SUPPORT/
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/.persistentStore_SUPPORT/_EXTERNAL_DATA/
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/persistentStore

(「CoreDataLogs」ディレクトリにも多数のファイルがありますが、簡潔にするためにここでは示しませんでした)。

この問題は、ファイルパッケージUTIを誤って作成したことに関係しているとしか思えません。他の誰かがiCloudでカスタムファイルパッケージをうまく使用しましたか?これはバグですか?

4

2 に答える 2

3

これは仕様によるものです。

APIは、Spotlightでもこのように機能します。これらのドキュメントの内容は基本的に非公開であるため、パッケージドキュメントに分類されるべきではありません。iCloudの場合、これはそれほど意味がありませんが、彼らがそれを変更することはないと思います。APIが使用されている場所に応じて、2つの異なる方法で機能することは意味がありません。

これは歴史的なことだと思います。Macでは、カスタムドキュメントタイプを処理するためにSpotlightインポーターを実装できます。iOSでは、これはまだ可能ではないと思います(間違っている場合は訂正してください)。したがって、今のところ、APIのこの「機能」を回避する必要があります。

代わりにドキュメントを検索して、そこからメタデータを取得することもできます。それ以外の場合は、行ったように拡張機能をチェーンすることで機能するはずです。

于 2012-05-02T15:36:23.090 に答える
1

iOS5.1ベータ3以降にアップグレードします。UIManagedDocument+iCloudがiOS5.0でまったく機能しないと思います。

于 2012-02-16T19:22:33.577 に答える