NSKeyedArchiver için parametre değiştirildiDataWithRootObject: kaydetmeye çalıştığım dizi mi yoksa dizi mi yoksa NSData'ya mı dönüştürülüyor?NSKeyedArchiver archivedDataWithRootObject:
6
A
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.
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.
Tamlığı sağlamak için, tersini yapmak için bir NSKeyedUnarchiver kullanın. –
"dizideki tüm öğelerin encodeWithCoder uygulamasını gerçekleştirmesi gerekiyor:" <- Bu yalnızca özel nesneler için gerekli midir? –
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