2012-04-21 3 views
9

У меня есть приложение, которое использует UIDocument, основанный на NSFileWrapper. Моя файловая оболочка - это каталог с именем «XXX.cp» с двумя подфайлами «photo.data» и «photo.metadata». Это, кажется, сохранить и документы нагрузки хорошо, однако, когда я иду в Настройки \ Управление Storage \ Unknown суб-файлы перечислены отдельно:iCloud & NSFileWrapper: отображается как 2 разных файла в настройках

Settings

Я ожидал его, чтобы показать «XXX.cp» вместо эти два подфайла. Я думаю, что у меня есть документ ИМП установить и экспортируются должным образом:

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 букв. У меня было всего 2 буквы: «.cp». Я переключил его на «.cap», и он сработал: P

+0

У меня тоже была эта проблема, и у меня есть 3 буквы для расширения моего файла. Я использую расширение .tfx для моей файловой оболочки. Недавно я решил поместить мои файлы-обертки в отдельную папку в моем вездесущем контейнере, который я называю SyncDocuments. Таким образом, отдельные файлы не отображаются для пользователя. Но это то, что я действительно хочу, поскольку мои файлы подкласса UIDocument не предназначены для взаимодействия с пользователями напрямую. –

+0

У меня точно такая же проблема, но у моего расширения файла есть три буквы (и значок). Я думаю, что это немного подозрительная настройка в экспортируемой UTI. Моя догадка заключается в том, что в iCloud происходит какое-то кэширование и что изменение расширения с .cp на .cap исправляет что-то, что было нарушено. – auco

+0

Эй, Рэй люблю твои учебники, но у меня все еще есть проблема. Я могу заставить свои обертки отображать как пакет, но тогда моя nsmetadataquery их не видит. Не событие, если я ищу все документы с помощью *. Мой первый тип документа работает, но моих изображений нет – zambono

1

Я не изменил свой UTI на три символа. Он остается 11 символов. Сначала я видел ту же проблему, о которой сообщает Рэй. Я просмотрел документацию больше и нашел в «Руководстве по программированию iOS» - «Ресурсы, связанные с приложениями» в параграфе «Объявление типов поддерживаемых документов вашего приложения», которые «Для каждого типа документа вы должны предоставить следующую информацию как минимум:

  • имя
  • значок
  • типы файлов

Я предоставил имя и тип файлов, но не значок. Таким образом, я взбитый маленький значок самого удивительного документа Я мог бы через 22 секунды добавить его в свой проект, добавив его в Targe t, и на моем iPad, настройках, iCloud, управлении хранилищем, MyApp, я вижу только имя обертки файла, стиль NSMetadataItemDisplayNameKey!

0

У меня была такая же проблема, но у моего расширения было три символа, и у меня также была иконка. Однако после чтения this comment я попробовал удалить LSItemContentTypes в разделе CFBundleDocumentTypes («Типы: com.razeware.captionedPhoto» на втором изображении в разделе «типы документов»), и он сработал.

Я также заметил, что демо-версия WWDC «UIDocument и iCloud» также не имеет набора LSItemContentType. Похоже на огромную ошибку, поскольку the docs ясно указывает, что должен быть тип документа.

 Смежные вопросы

  • Нет связанных вопросов^_^