我正在尝试创建一个用户可编辑的plist,用户可以在其中存储自定义创建的锻炼例程,包括从应用程序包中的另一个data.plist引用的字符串。
我认为NSCoding是解决这个问题的最好方法。到目前为止,我将界面设置为导航栏和表格视图。
我希望它为空白是默认值,用户必须按导航栏右上角的“+”。然后他可以为数组中的条目输入名称,例如胸部日或二头肌日。在该数组中,将是当天特定练习的字典或其他字符串数组,例如卧推或二头肌卷曲。
此plist需要是可编辑的,因此它将在用户文档文件夹中而不是在应用程序包中。
示例:
顶级阵容包括胸部日,背部日,腿部日。在Chest Day词典中,包括卧推,胸部拉动,俯卧撑等。
更新
添加此方法以搜索例程文件;
-(void)loadData
{
if(YES)
{
NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString* routineFile = [documentsPath stringByAppendingPathComponent:@"routine.plist"];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:routineFile];
}
else
{
//load file
}
}
答案 0 :(得分:2)
NSCoding是NSArchiver,NSKeyedArchiver等使用的协议,不是用于将数组序列化为属性列表。
忘记用户要编辑属性列表的想法。用户将在您的应用程序中编辑数据 - 它作为属性列表存储的事实只是一个实现细节。当您的应用程序启动时,您将读取存储在数据文件中的数据。用户编辑它,查看它,无论如何。稍后,也许在每次编辑之后,也许在应用程序退出之前,您将数据写回文件。由于它是属性列表,因此不必担心更新文件;您已经拥有了所有数据,因此请编写一个全新的属性列表,然后使用该文件替换旧文件。
也许我错了,你真的打算让用户手动编辑属性列表,使用文本编辑器。这将是一个错误。很棒的属性列表是人类可读的,但要求用户手动编辑原始数据文件,这表明您的应用程序已损坏。您的应用程序的整个目的是为用户跟踪此信息;如果他们想使用文本编辑器来管理它,他们就不需要你的应用程序。所以,说到这里,我希望我没错。 ; - )
答案 1 :(得分:1)
我认为我不会使用NSCoding - 如果您正在使用的是标准的plist对象,如NSArray,NSDictionary和NSString,则顶部数组的-writeToFile:atomically:方法是一种简单的方法这份工作。