保存NSArray

时间:2009-09-28 15:12:47

标签: objective-c cocoa

我想将NSArray保存为文件或可能使用用户默认值。这是我希望做的。

  1. 检索已保存的NSArray(如果有)。
  2. 用它做点什么。
  3. 删除已保存的数据(如果有)。
  4. 保存NSArray。
  5. 这可能,如果可以的话,我应该怎么做?

3 个答案:

答案 0 :(得分:39)

NSArray为您提供了两种方法来完全按照您的意愿执行:initWithContentsOfFile:writeToFile:atomically:

一个简短的例子可能如下所示:

//Creating a file path under iOS:
//1) Search for the app's documents directory (copy+paste from Documentation)
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//2) Create the full file path by appending the desired file name
NSString *yourArrayFileName = [documentsDirectory stringByAppendingPathComponent:@"example.dat"];

//Load the array
NSMutableArray *yourArray = [[NSMutableArray alloc] initWithContentsOfFile: yourArrayFileName];
if(yourArray == nil)
{
    //Array file didn't exist... create a new one
    yourArray = [[NSMutableArray alloc] initWithCapacity:10];

    //Fill with default values
}
...
//Use the content
...
//Save the array
[yourArray writeToFile:yourArrayFileName atomically:YES];

答案 1 :(得分:14)

您可以对阵列包含的对象实施NSCoding,并使用NSKeyedArchiver将阵列序列化/反序列化为磁盘。

BOOL result = [NSKeyedArchiver archiveRootObject:myArray toFile:path];

归档程序将遵从您的NSCoding实现,以从每个对象获取可序列化的值,并编写一个可以使用NSKeyedUnarchiver读取的文件:

id myArray = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

serialization guide中的更多信息。

答案 2 :(得分:1)

这似乎是最适合Core Data的问题,因为这将处理所有持久对象数据。当您检索数据时,它将返回一个未分类的NSSet,因此您必须有一些方法对数组中的数据进行排序,例如与您创建的每个对象关联的唯一ID号。