存储iPhone数据的最佳方式(自定义NSObject)

时间:2013-04-19 20:50:42

标签: ios objective-c core-data nsuserdefaults

我有一个NSMutableArray,其中存储了名为“address”的对象。地址是NSObject,具有4-5个属性(NSStrings)。 NSMutableArray最多包含15个地址对象。

将该阵列存储在iPhone上的最佳方法是什么? Core dataNSUserDefaults?我是否应该自己存储每个地址对象,而不是一个NSMutableArray中的所有对象?在那种情况下,我应该对iPhone做什么?

3 个答案:

答案 0 :(得分:4)

正如@rog所说,你可以使用NSUserDefaults来保存数据

&安培;你应该让你的对象遵循protocal NSCoding

例如,如果您的对象是“YouObject”

@interface YouObject: NSObject {

}

@property (nonatomic, copy) NSString *uid;
@property (nonatomic, copy) NSString *name;

@end


//implement this 2 method 

- (id)initWithCoder:(NSCoder *)decoder {
  if (self = [super init]) {
    self.title = [decoder decodeObjectForKey:@"uid"];
    self.author = [decoder decodeObjectForKey:@"name"];
  }
  return self;
}

- (void)encodeWithCoder:(NSCoder *)encoder {
  [encoder encodeObject:title forKey:@"uid"];
  [encoder encodeObject:author forKey:@"name"];
}

然后使用NSUserDefaults

归档或取消归档
//archive
YouObject *object = [YouObject ....]
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:object ];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"address"];

//unarchive
NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"address"];
YouObject *object = (YouObject *)[NSKeyedUnarchiver unarchiveObjectWithData:data];

或者如果你有一个YouObject数组,你可以用同样的方式保存NSArray;

//archive
NSArray *addresses;
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:address ];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"address"];

//unarchive
NSData *addressData = [[NSUserDefaults standardUserDefaults] objectForKey:@"address"];
NSArray *addresses = (NSArray*)[NSKeyedUnarchiver unarchiveObjectWithData:address];

答案 1 :(得分:1)

对于你所描述的内容,我认为NSUserDefaults就足够了。看这篇文章:How to store custom objects in NSUserDefaults。您可以在此处详细了解NSUserDefaults的限制:What are the limitations of NSUserDefaults

但是,如果您正在保存/加载大量数据,那么您应该考虑使用核心数据。

答案 2 :(得分:0)

最简单的方法是使用nsmutablearray读写方法。所有数据都必须是plist数据类型nsarray nsdictionary nsstring nsnumber nsdate。像rog建议的Nsuserdefault也很好。只要数据量仍然很小。