2012-04-21 21 views
9

Tôi có một ứng dụng sử dụng UIDocument dựa trên NSFileWrapper. Trình bao bọc tệp của tôi là một thư mục có tên "XXX.cp", với hai tệp phụ "photo.data" và "photo.metadata". Có vẻ như để tiết kiệm và tài liệu tải tốt, tuy nhiên khi tôi đi đến Settings \ Quản lý kho \ Unknown tiểu tập tin được liệt kê riêng:iCloud & NSFileWrapper: Hiển thị dưới dạng 2 tệp khác nhau trong Cài đặt

Settings

tôi đã mong đợi nó để hiển thị "XXX.cp" thay vì hai tệp phụ này. Tôi nghĩ rằng tôi có tài liệu UTI thành lập và xuất khẩu đúng:

UTI UTI Export

Và tôi nghĩ tôi đang tạo ra những gói tập tin một cách chính xác (đặc biệt là kể từ khi nó đọc/viết tốt):

- (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;   
} 

Nhưng vẫn không có xì gà. Bất cứ ai biết vấn đề là gì? Cảm ơn!

Trả lời

4

Đã tìm ra điều này. Vấn đề là bạn cần phải có một phần mở rộng tên tập tin của 3 chữ cái. Tôi chỉ có 2 chữ cái: ".cp". Tôi đã chuyển nó thành ".cap" và nó hoạt động: P

+0

Tôi cũng gặp sự cố này và tôi có 3 chữ cái cho phần mở rộng tệp của mình. Tôi sử dụng phần mở rộng .tfx cho trình bao bọc tệp dựa trên thư mục của tôi. Gần đây tôi đã quyết định đặt các tệp trình bao bọc của mình trong một thư mục riêng biệt trong vùng chứa phổ biến của tôi, tôi gọi SyncDocuments. Bằng cách đó, các tệp riêng lẻ không hiển thị cho người dùng. Nhưng đây là những gì tôi thực sự muốn vì các tệp lớp con UIDocument của tôi không có nghĩa là người dùng tương tác trực tiếp. –

+0

Tôi có cùng một vấn đề, nhưng phần mở rộng tệp của tôi có ba chữ cái (và một biểu tượng). Tôi nghĩ rằng đây là một số thiết lập fishy trong UTI xuất khẩu. Linh cảm của tôi là, có một số loại bộ nhớ đệm đang diễn ra trong iCloud và thay đổi phần mở rộng từ .cp thành .cap đã sửa lỗi đã bị hỏng. – auco

+0

Hey Ray yêu các hướng dẫn của bạn, nhưng tôi vẫn gặp sự cố. Tôi có thể lấy các trình bao bọc của mình để hiển thị dưới dạng gói nhưng sau đó nsmetadataquery của tôi không nhìn thấy chúng. Không phải sự kiện nếu tôi tìm kiếm tất cả tài liệu có dấu *. Loại tài liệu đầu tiên của tôi hoạt động, nhưng hình ảnh của tôi không phải là – zambono

1

Tôi không thay đổi UTI thành ba ký tự. Nó vẫn còn 11 ký tự. Lúc đầu, tôi đã nhìn thấy cùng một vấn đề Ray đang báo cáo. Tôi đã xem tài liệu nhiều hơn và được tìm thấy trong "Hướng dẫn lập trình ứng dụng iOS" - "Tài nguyên liên quan đến ứng dụng" trong đoạn "Tuyên bố các loại tài liệu được hỗ trợ của ứng dụng", "Đối với mỗi loại tài liệu, bạn phải cung cấp các thông tin sau ở mức tối thiểu:

  • một tên
  • một biểu tượng
  • các loại tập tin

tôi đã cung cấp một tên và các loại tập tin, nhưng không phải là một biểu tượng. Vì vậy, tôi whipped lên biểu tượng tài liệu tuyệt vời nhất ít Tôi có thể trong 22 giây, thêm nó vào dự án của tôi, thêm nó vào Targe Các loại tài liệu của t và trên iPad của tôi, Cài đặt, iCloud, Quản lý bộ nhớ, MyApp, tôi chỉ thấy tên tệp trình bao bọc, kiểu NSMetadataItemDisplayNameKey!

0

Tôi gặp vấn đề tương tự nhưng tiện ích mở rộng của tôi có ba ký tự và tôi cũng có biểu tượng. Tuy nhiên, sau khi đọc this comment, tôi đã thử xóa LSItemContentTypes trong phần CFBundleDocumentTypes ("Types: com.razeware.captionedPhoto" trong hình ảnh thứ hai trong "loại tài liệu") và nó hoạt động.

Tôi cũng nhận thấy rằng bản trình diễn WWDC "UIDocument và iCloud" cũng không có bộ LSItemContentType. Có vẻ như một lỗi lớn đối với tôi, như là the docs, hãy nêu rõ rằng phải có loại tài liệu.

Các vấn đề liên quan