如何使用NSUserDefaults动态分配空间?

时间:2013-03-17 17:17:36

标签: ios nsarray nsuserdefaults

我之前使用过NSUserDefaults,为我的应用程序的设置部分存储了一些变量。

然而,现在我正在制作一个食谱应用程序,用户可以输入自己的食谱并保存它们。每个食谱都有一个标题描述日期等。所以我想我需要一个数组来保存每个食谱。但是,我将如何动态添加每个新配方?

我的意思是我刚刚开始将配方保存在阵列的下一个位置?如果用户删除一个食谱并且数组中有一个空位,会发生什么?

我的逻辑在保存数据方面是否正确?你会做什么?

1 个答案:

答案 0 :(得分:5)

NSUserDefaults不是你想要的。从技术上讲,它可以满足您的需求,但您可能最好只创建一个具有所有配方特性属性的自定义类,并使该类符合<NSCoding>协议,以便您可以转换它数据并将其写入文件。

我知道如果你以前从未这样做过,那听起来可能很复杂,但实际上并不是太糟糕。

Here's an example for implementing <NSCoding>.忽略显示将数据保存到NSUserDefaults的结尾部分。

要保存您的数据,而不是使用NSUserDefaults,take a look at this question。对于一项小任务来说,它看起来似乎很多代码,但这个概念非常简单。

编辑:

要将对象转换为数据,假设您已在自定义类中实现了<NSCoding>

YourClass* someObject;

// do whatever you do to fill the object with data

NSData* data = [NSKeyedArchiver archivedDataWithRootObject:someObject];

/*
 Now we create the path to the documents directory for your app
 */

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
    NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

/*
 Here we append a unique filename for this object, in this case, 'Some_Recipe'
 */

NSString* filePath = [documentsDirectory stringByAppendingString:@"Some_Recipe"];

/*
 Finally, let's write the data to our file
 */

[data writeToFile:filePath atomically:YES];

/*
 We're done!
 */