@Brad Smith nie jest kompletna, a nawet w pewnym sensie jest niepoprawna. Musimy wykorzystać NSKeyedArchiver
i NSKeyedUnarchiver
następująco:
Dokonaj klasy (na przykład w tym przypadku Person
) w celu dostosowania się do protokołu NSCoding
i wdrożyć zarówno metody jak:
- (id)initWithCoder:(NSCoder *)decoder {
self = [super init];
if(self) {
self.name = [decoder decodeObjectForKey:<key_for_property_name>];
// as height is a pointer
*self.height = [decoder decodeFloatForKey:<key_for_property_height>];
self.age = [decoder decodeIntForKey:<key_for_property_age>];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:self.name forKey:<key_for_property_name>];
//as height is a pointer
[encoder encodeFloat:*self.height forKey:<key_for_property_height>]
[encoder encodeInt:self.age forKey:<key_for_property_age>];
}
Korzystanie NSUserDefaults
// Write to NSUserDefaults
NSData *archivedObject = [NSKeyedArchiver archivedDataWithRootObject:<your_class_object>];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:archivedObject forKey:<key_for_archived_object>];
[defaults synchronize];
// Read from NSUserDefaults
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *archivedObject = [defaults objectForKey:<key_for_archived_object>];
<your_class> *obj = (<your_class> *)[NSKeyedUnarchiver unarchiveObjectWithData:archivedObject];
Dlaczego aren” t float i int legal? 'NSUserDefaults' ma metody dla obu. –
Czy rozwiązałeś swój problem? Proszę zaznaczyć poprawną odpowiedź, aby oznaczyć ten post jako odpowiedzi. –