can*_*boy 16 iphone objective-c nsdictionary nsuserdefaults nsarray
如果我有一个自定义类Person,它有三个变量(属性化和合成):
NSString* theName;
float* theHeight;
int theAge;
Run Code Online (Sandbox Code Playgroud)
Person实例存储在NSArray'Group'中.只有一个集团.在NSUserDefaults中存储和加载组的最佳方法是什么?(请记住,对于NSUserDefaults,float和int不合法)
Vas*_*asu 45
@Brad Smith的回答并不完整,甚至在某种意义上也是错误的.我们必须使用NSKeyedArchiver与NSKeyedUnarchiver如下:
使您的类(例如在本例中Person)符合协议NSCoding并将这两种方法实现为:
- (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>];
}
Run Code Online (Sandbox Code Playgroud)
运用 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];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10624 次 |
| 最近记录: |