2012-04-21 10 views
9

NSFileWrapper tabanlı bir UIDocument kullanan bir uygulama var. Benim dosya sarıcı, "photo.data" ve "photo.metadata" adlı iki alt dosya ile "XXX.cp" adlı bir dizindir. Bu kaydetmek ve ben Ayarlar giderken yük belgelerin ince, ancak \ Storage \ Bilinmeyen yönetme gibi görünüyor alt dosyalar ayrı listelenmiştir:iCloud & NSFileWrapper: 2 farklı dosyayı Ayarlar olarak gösteriliyor

Settings

ben "XXX.cp" göstermek yerine onu bekliyordum Bu iki alt dosya. Ben belge İYE kurmak ve düzgün ihraç var:

UTI UTI Export

Ve eğer doğru dosya sarmalayıcılarını oluşturma düşünüyorum (okur özellikle/ince yazıyor):

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

Ama yine de puro yok. Herhangi biri problemin ne olduğunu biliyor mu? Teşekkürler!

cevap

4

Bunu anladım. Sorun 3 harfli bir dosya adı uzantısına sahip olmanız gerekiyordu. Mayın sadece 2 harf vardı: ".cp". ".cap" olarak değiştirdim ve işe yaradı: P

+0

Bu sorunu da yaşadım ve dosya uzantım için 3 harfim var. Dizin tabanlı dosya sarıcı için .tfx uzantısını kullanıyorum. Son zamanlarda sarma dosyamı SyncDocuments adlı her yerde bulunan kapsayıcımdaki ayrı bir klasöre koymaya karar verdim. Bu şekilde bireysel dosyalar kullanıcı için görünmez. Ancak, UIDocument alt sınıf dosyalarımın doğrudan etkileşim kurması için kullanılmasını istemediğim şey budur. –

+0

Tam olarak aynı sorun var, ancak dosya uzantım üç harf (ve bir simge) vardır. Bu ihraç UTI bazı balık ayarlı olduğunu düşünüyorum. Herkese göre, iCloud'da bir çeşit önbellekleme var ve bu uzantı .cp'den .cap'a değiştirildi. – auco

+0

Hey Ray öğreticilerinizi seviyorum, ancak hala bir sorun yaşıyorum. Paketleyicileri paket olarak gösterebilirim ama sonra nsmetadataquery onları görmez. Tüm belgeleri bir * ile ararsam olay olmaz. İlk belge türüm çalışıyor ancak görüntülerim bir tane daha değil – zambono

1

UTI'mi üç karakter olarak değiştirmedim. 11 karakter kalır. İlk başta Ray'ın rapor ettiği aynı şeyi görüyordum. Dokümantasyona daha fazla baktım ve "Uygulamanızın Desteklenen Belge Türlerini Bildirme" paragrafının "Uygulamaya İlişkin Kaynaklar" bölümünde yer alan "Uygulamaya İlişkin Kaynaklar" bölümünde yer alan "Her belge türü için aşağıdaki bilgileri en azından aşağıda vermeniz gerekir:

  • bir isim
  • bir isim ve dosya türlerini değil, bir simge verdiğini

dosya türleri. Bu yüzden en müthiş küçük belge simgesini kadar çırpılmış bir simge 22 saniye içinde projeme ekledim, Targe'e ekledim t'nin Belge Türleri ve iPad'im, Ayarlar, iCloud, Depolamayı Yönet, Uygulamam, sadece dosya sarmalayıcı adı, NSMetadataItemDisplayNameKey stili görüyorum!

0

Aynı sorunu yaşadım, ancak uzantımın üç karakteri vardı ve ayrıca bir simgem vardı. Ancak, this comment okuduktan sonra, LSItemContentTypesCFBundleDocumentTypes bölümündeki ("Types: com.razeware.captionedPhoto") "belge türleri" altındaki ikinci görüntüdeki silmeyi denedim ve çalıştım.

Ayrıca, "UIDocument ve iCloud" WWDC demosu LSItemContentType öğesinin de ayarlanmadığını fark ettim. the docs açık bir belge türü olması gerektiği gibi, bana büyük bir hata gibi görünüyor.

İlgili konular