0

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

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

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

我的逻辑在保存数据方面是正确的吗?你会怎么办?

4

1 回答 1

5

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

我知道如果您以前从未这样做过,这听起来可能很复杂,但这真的不算太糟糕。

这是一个实现的示例<NSCoding>忽略它显示您将数据保存到的结尾部分NSUserDefaults

要保存您的数据,而不是使用 NSUserDefaults,请查看此问题。对于一个小任务来说,它可能看起来有很多代码,但这个概念非常简单。

编辑:

要将您的对象转换为数据,假设您已经<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!
 */
于 2013-03-17T17:24:06.320 回答