使用NSCoding创建用户可编辑的Plist

时间:2011-03-23 01:41:11

标签: iphone objective-c plist nscoding

我正在尝试创建一个用户可编辑的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
    }
}

2 个答案:

答案 0 :(得分:2)

NSCoding是NSArchiver,NSKeyedArchiver等使用的协议,不是用于将数组序列化为属性列表。

忘记用户要编辑属性列表的想法。用户将在您的应用程序中编辑数据 - 它作为属性列表存储的事实只是一个实现细节。当您的应用程序启动时,您将读取存储在数据文件中的数据。用户编辑它,查看它,无论如何。稍后,也许在每次编辑之后,也许在应用程序退出之前,您将数据写回文件。由于它是属性列表,因此不必担心更新文件;您已经拥有了所有数据,因此请编写一个全新的属性列表,然后使用该文件替换旧文件。

也许我错了,你真的打算让用户手动编辑属性列表,使用文本编辑器。这将是一个错误。很棒的属性列表是人类可读的,但要求用户手动编辑原始数据文件,这表明您的应用程序已损坏。您的应用程序的整个目的是为用户跟踪此信息;如果他们想使用文本编辑器来管理它,他们就不需要你的应用程序。所以,说到这里,我希望我没错。 ; - )

答案 1 :(得分:1)

我认为我不会使用NSCoding - 如果您正在使用的是标准的plist对象,如NSArray,NSDictionary和NSString,则顶部数组的-writeToFile:atomically:方法是一种简单的方法这份工作。