2012-01-26 10 views
6

私はUIManagedDocumentを使用してiCloudでファイルを管理しています。設定後NSMetadataQueryそうのように:NSMetadataQueryカスタムファイルパッケージタイプを無視する

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

私は好奇心の問題に遭遇しています - 私の文書はファイル拡張子なしで命名されたとき、または.txtなどの公共の拡張子(例:@"NewDocument2"のため)、メタデータクエリが正しく見つけましたDocumentMetadata.plistファイル。しかし、私のカスタムファイル拡張子を使用すると、クエリは何も見つけられません。クエリが開始されたときや、新しい文書を追加したときなどは見つかりません。

私の質問には、おそらく実際にはディレクトリ(ファイルのパッケージは任意のレート)であることを認識していないため、カスタムファイル拡張子を持つドキュメントが表示されているようです内部にDocumentMetadata.plistファイルがあります。しかし、私はカスタムUTIをアプリのinfo.plistで宣言しました。

おそらく私はUTIを間違って宣言しましたか?私はAppleのガイドライン(Document-Based App Programming Guide for iOSUniform Type Identifiers Overview)を作成する際にそれに従ったが、何かが間違っているように思える。


編集: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でカスタムファイルパッケージを正常に使用しましたか?これはバグですか?

+1

まだUIManagedDocumentの痛みに苦しんでいます。これは本当の答えではありませんが、UIManagedDocumentsを "Documents"フォルダの外に格納することを検討することをお勧めします。それ以外の場合、ユーザーが設定 - > iCloud - >ストレージとバックアップ - >ストレージの管理 - >に移動すると、DocumentMetadata.plistエントリが表示されます。ドキュメントと同じレベルの別のフォルダにドキュメントを置いています。次に、クエリでNSMetadataQueryUbiquitousDataScopeを使用する必要があります。ファイル拡張子が必要な場合、またはこの場合に意味があるかどうかは不明です。 – Daniel

答えて

3

これは仕様です。

このAPIはSpotlightでも同様に動作します。これらの文書の内容は基本的に私的なものなので、パッケージ文書には進まないでください。 iCloudを使用すると、これは意味をなさないものですが、変更しないと思われます。 APIがどこで使用されているかによって2つの異なる方法で動作することは意味がありません。

これは歴史的なことだと思います.Macでは、カスタムドキュメントタイプを処理するSpotlightインポータを実装できます。 iOSでは、これはまだ可能だとは思わない(私が間違っていれば修正する)。今のところ、APIのこの「機能」を回避するだけです。

代わりにドキュメントを検索し、そこからメタデータを取得することができます。さもなければ、あなたがしたように連鎖を連鎖させるべきです。

1

iOS 5.1 beta 3以降にアップグレードしてください。私はUIManagedDocument + iCloudがiOS 5.0でまったく動作しないと信じています。

+0

実際に私は最近の最新の5.1ベータ版にアップグレードしましたが、Xcode 4.3の現在のプレビューでは、コード折りたたみ/インデントのバグが非常に不快なため、すぐに5.0に戻っていました。最新のベータ版を使用している間、このファイルパッケージの問題はまだ残っていました。 – Stuart

関連する問題