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