保存到自定义类的nsuserdefaults的最佳方法?

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的回答并不完整,甚至在某种意义上也是错误的.我们必须使用NSKeyedArchiverNSKeyedUnarchiver如下:

使您的类(例如在本例中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)

  • 我希望我可以回答你的答案.布拉德史密斯完全是误导. (3认同)