0

我正在尝试创建一个用户可编辑的 plist,用户可以在其中存储自定义创建的锻炼例程,包括从应用程序包中的另一个 data.plist 引用的字符串。

我假设 NSCoding 是解决此问题的最佳方法。到目前为止,我将界面设置为导航栏和表格视图。

我希望它默认为空白,用户必须按导航栏右上角的“+”。然后他可以为数组中的条目输入名称,例如胸日或二头肌日。在该数组中,将是字典或当天特定练习的另一个字符串数组,例如卧推或二头肌弯举。

这个 plist 需要是可编辑的,因此它将进入用户文档文件夹而不是应用程序包。

例子:

顶部阵列包括胸部日、背部日、腿部日。在胸日词典中,包括卧推、拉胸、俯卧撑等。

更新:

增加这个方法来搜索例程文件;

    -(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
    }
}
4

2 回答 2

2

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

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

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

于 2011-03-23T02:08:04.830 回答
1

我不认为我会为此使用 NSCoding - 如果您使用的是标准 plist 对象,如 NSArray、NSDictionary 和 NSString,那么顶部数组的 -writeToFile:atomically: 方法是完成这项工作的简单方法。

于 2011-03-23T01:50:21.280 回答