2011-07-21 54 views
1

我有一个填充了我的应用程序附带的数据的.plist。有关于保存到plist的问题

它基本上是一个包含其他数组/字典的字典数组。

我从这个数组中取得的值和在我的应用程序中使用的值可能是一个名称,所以“计算机”。

我添加了一个功能,让用户创建自己的项目,而不是从数组中加载的内容中进行选择。但是,我应该将这个项目保存到同一个.plist中,还是为每个用户创建一个单独的.plist?

然后,我该如何从标准.plist和用户创建的.plist中获取信息并将它们加载到一个tableView中?

回答

2

如果您正在为iOS编写代码,您无法真正保存到同一个plist文件,因为您无法写入应用程序包。
你可以做的一件事就是将该plist的副本保存到应用程序的Documents文件夹中,然后修改该plist,这样所有的数据都统一在一个文件中。
或者您始终可以从应用程序包中加载原始plist,制作NSArray的可变副本,从Documents文件夹中加载用户对象的附加plist,并通过调用addObjectsFromArray将它们附加到NSMutableArray
或者你甚至可以将它们保存在单独的NSArray中,但通过从表格视图数据源的tableView:numberOfRowsInSection:方法中返回[originalDataArray count] + [userDataArray count],并在tableView:cellForRowAtIndexPath:方法中使用适当的数据,将它们显示在表格视图中。

编辑:

关于保存用户数据,你不必担心写的plist。
NSArray符合NSCoding协议,因此NSDictionary也是如此,这意味着您可以使用类似NSKeyedArchiver类的方式轻松保存并加载它。

下面是我在一个旧项目中的一个例子,其中我有一个NSMutableArray,它保存了一些用户生成的数据,并且我保存并加载了它NSKeyedArchiver(简化为仅显示相关代码,一年前我刚刚开始使用ios,所以可能不是最好的方式):

- (BOOL) saveData 
{ 
    BOOL success = NO; 

    NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO); 

    NSString *path = [[[pathList objectAtIndex:0] stringByAppendingPathComponent:@"data.txt"] stringByExpandingTildeInPath]; 

    success = [NSKeyedArchiver archiveRootObject:myArray toFile:path]; 
    //note: myArray is an NSMutableArray, could be an NSArray 

    return success; 
} 


- (BOOL) loadData 
{ 
    BOOL success = NO; 

    NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO); 

    NSString *path = [[[pathList objectAtIndex:0] stringByAppendingPathComponent:@"data.txt"] stringByExpandingTildeInPath]; 

    if((myArray = [NSKeyedUnarchiver unarchiveObjectWithFile:path])) 
    { 
     [myArray retain]; 
     success = YES; 
    } 
    else 
    { 
     myArray = [[NSMutableArray alloc] init]; 
     success = NO; 
    } 

    return success; 
} 
+0

谢谢filipe,我觉得有2个单独的数组是最好的选择。使用原始数组,它是在Xcode的.plist编辑器中创建的。我需要在代码中创建第二个数组,因为用户将是输入数据的人,对吧?还是有更简单的方法来做到这一点?这是我原来的数组看起来像:http://www.box.net/shared/static/8vrur2i4r28lphlyysg5.png – Jon