0

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

在 iPhone 上存储该数组的最佳方式是什么?Core data? NSUserDefaults? 我是否应该将每个地址对象单独存储,而不是将所有对象存储在一个中NSMutableArray?在那种情况下,我该怎么办iPhone

4

3 回答 3

4

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

& 你应该让你的对象遵循协议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 Array,你可以用同样的方式保存 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];
于 2013-04-20T02:00:32.310 回答
1

对于你所描述的,我认为NSUserDefaults就足够了。请参阅这篇文章: 如何在 NSUserDefaults 中存储自定义对象NSUserDefaults您可以在此处了解有关限制的更多信息: NSUserDefaults 的限制是什么

但是,如果您要保存/加载大量数据,则应考虑使用 Core Data。

于 2013-04-19T21:09:25.720 回答
0

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

于 2013-04-23T01:47:32.023 回答