2012-04-21 12 views
9

私はNSFileWrapperベースのUIDocumentを使用するアプリケーションを持っています。私のファイルラッパーは "XXX.cp"という名前のディレクトリで、 "photo.data"と "photo.metadata"という2つのサブファイルがあります。ストレージ\不明を管理するサブファイルが別々に記載されています\私はセッティングに行くときしかし、細かいドキュメントを保存およびロードするようだ:iCloud&NSFileWrapper:設定で2つの異なるファイルとして表示

Settings

私はそれが「XXX.cp」を表示するように期待の代わりましたこれら2つのサブファイル。私はUTIが適切に設定され、エクスポートされた文書を持っていると思う:

UTI UTI Export

そして、私は、私は(それが/は細かい読み書き、特に以来)正しくファイルラッパーを作成しています考える:

- (void)encodeObject:(id<NSCoding>)object toWrappers:(NSMutableDictionary *)wrappers preferredFilename:(NSString *)preferredFilename {  
    @autoreleasepool {     
     NSMutableData * data = [NSMutableData data];  
     NSKeyedArchiver * archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];  
     [archiver encodeObject:object forKey:@"data"];  
     [archiver finishEncoding]; 
     NSFileWrapper * wrapper = [[NSFileWrapper alloc] initRegularFileWithContents:data];  
     [wrappers setObject:wrapper forKey:preferredFilename];  
    }  
}   

- (id)contentsForType:(NSString *)typeName error:(NSError *__autoreleasing *)outError {   
    if (self.captionedPhotoMetadata == nil || self.captionedPhoto == nil) {  
     *outError = [[NSError alloc] initWithDomain:CaptionedPhotoErrorDomain code:CaptionedPhotoInvalidDocument userInfo:[NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Invalid document!", @""), NSLocalizedDescriptionKey, nil]];  
     return nil;   
    }  
    NSMutableDictionary * wrappers = [NSMutableDictionary dictionary];  
    [self encodeObject:self.captionedPhotoMetadata toWrappers:wrappers preferredFilename:METADATA_FILENAME];  
    [self encodeObject:self.captionedPhoto toWrappers:wrappers preferredFilename:DATA_FILENAME];  
    NSFileWrapper * fileWrapper = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:wrappers];  
    return fileWrapper;   
} 

しかしまだ葉巻はありません。誰でも問題が何であるか知っていますか?ありがとう!

答えて

4

これを実証しました。問題は、ファイル名の拡張子を3文字にする必要があることでした。私の手紙は「.cp」の2文字しかなかった。私はそれを ".cap"に切り替え、それは働いた:P

+0

私もこの問題を抱えていました。ファイル拡張子には3文字しかありません。ディレクトリベースのファイルラッパーに拡張子.tfxを使用します。最近私のラッパーファイルを私のユビキタスコンテナ内の別のフォルダに置くことにしました。私はSyncDocumentsを呼び出します。そうすれば、個々のファイルがユーザーのために表示されません。しかし、これは私のUIDocumentサブクラスファイルがユーザーと直接対話するためのものではないので、本当に欲しいものです。 –

+0

私は全く同じ問題を抱えていますが、私のファイル拡張子には3つの文字とアイコンがあります。私はこれが輸出されたUTIのいくつかの釣り合いの悪い設定だと思う。私の感想は、iCloudに何らかのキャッシュがあり、拡張子を.cpから.capに変更すると、壊れたものが修正されたということです。 – auco

+0

ヘイレイはあなたのチュートリアルを大好きですが、私はまだ問題があります。パッケージとして表示するラッパーを取得できますが、nsmetadataqueryで表示されません。 *を使ってすべての文書を検索すると、イベントではありません。私の最初のドキュメントタイプは動作しますが、私のイメージはありません – zambono

1

私はUTIを3文字に変更しなかった。それは11文字のままです。最初はRayが報告しているのと同じ問題を見ていました。私はドキュメントをもっと調べて、「アプリケーションのサポートされているドキュメントタイプを宣言する」の段落の「iOS Appsプログラミングガイド」 - 「アプリケーション関連リソース」で見つけました。「各ドキュメントタイプごとに、

  • アイコン
  • ファイルタイプ

私は名前とファイルの種類ではなく、アイコンを提供していた。だから私は、最も素晴らしい小さなドキュメントアイコンを手早く私は22秒で私のプロジェクトにそれを加え、それをTargeに加えました私のiPad、設定、iCloud、ストレージ管理、MyAppでは、ファイルラッパー名NSMetadataItemDisplayNameKeyスタイルのみが表示されます。

0

私は同じ問題を抱えていましたが、私の拡張には3つの文字があり、またアイコンもありました。しかし、this commentを読んだ後、CFBundleDocumentTypesセクション(「ドキュメントタイプ」の2番目のイメージでは「タイプ:com.razeware.captionedPhoto」)を削除してみました。

また、WWDCデモ「UIDocumentとiCloud」にもLSItemContentTypeが設定されていないことに気付きました。 the docsにはドキュメントタイプがあるはずであることが明確に記載されているため、大きなバグのようです。

関連する問題