我之前使用过NSUserDefaults,为我的应用程序的设置部分存储了一些变量。
然而,现在我正在制作一个食谱应用程序,用户可以输入自己的食谱并保存它们。每个食谱都有一个标题描述日期等。所以我想我需要一个数组来保存每个食谱。但是,我将如何动态添加每个新配方?
我的意思是我刚刚开始将配方保存在阵列的下一个位置?如果用户删除一个食谱并且数组中有一个空位,会发生什么?
我的逻辑在保存数据方面是否正确?你会做什么?
答案 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!
*/