cevap

12

Genel bir diziyi NSData'a dönüştürmek için bir arşivleyiciye ihtiyacınız var! NSData'u nasıl besleyeceğinizi biliyorsanız, NSKeyedArchiver'u nasıl kullanacağınızı bilirsiniz. Yani:

NSArray* array= ... ; 
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:array]; 

Elbette sizin array ihtiyaçları tüm unsurları encodeWithCoder: uygulamaktır.

+4

Tamlığı sağlamak için, tersini yapmak için bir NSKeyedUnarchiver kullanın. –

+0

"dizideki tüm öğelerin encodeWithCoder uygulamasını gerçekleştirmesi gerekiyor:" <- Bu yalnızca özel nesneler için gerekli midir? –

+0

dizininizdeki tüm öğelerin, Apple tarafından veya sizin tarafınızdan "encodeWithCoder:" uygulamasına sahip olması gerekir. Apple tarafından tedarik edilen bir nesnenin, resmi belgelere göz atarak bunu uygulayıp uygulamadığını kontrol edebilirsiniz ... "NSCoder" protokolünü uygulayıp uygulamadığını kontrol edebilirsiniz. – Yuji

13

Yuji'nin cevabı doğru. fakat daha doğrusu bir dizinin sizin eleman protokolünü uygulamak ve initWithCoder yöntemlere kendi kodunuzu fillin zorunda: ve encodeWithCoder: gibi:

- (id)initWithCoder:(NSCoder *)decoder { 
    if (self = [super init]) { 
     self.title = [decoder decodeObjectForKey:@"title"]; 
     self.author = [decoder decodeObjectForKey:@"author"]; 
     self.published = [decoder decodeBoolForKey:@"published"]; 
    } 
    return self; 
} 
- (void)encodeWithCoder:(NSCoder *)encoder { 
    [encoder encodeObject:title forKey:@"time"]; 
    [encoder encodeObject:author forKey:@"author"]; 
    [encoder encodeBool:published forKey:@"published"]; 
} 

sonra arşiv kullanabilir ve benzeri unchariver:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:notes]; 
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"notes"]; 

NSData *notesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"notes"]; 
NSArray *notes = [NSKeyedUnarchiver unarchiveObjectWithData:notesData]; 

Daha fazla bilgi için "Archiving Objective-C Objects with NSCoding" referansını alabilirsiniz.

İlgili konular