动态地向plist添加数据并填充tableview单元格

时间:2011-08-05 06:32:38

标签: iphone objective-c uitableview plist

我正在开发一个应用程序,我已经创建了plist,我正在向它添加数据......但是每次数据都被覆盖并且之前的数据丢失时,会发生什么。我的意思是假设我添加了一个叫做岩石的名字,下次当我添加岩石时,岩石被岩石覆盖,但我想要的是我的plist应该包含岩石和岩石等等...我在plist中添加数据用户输入....

这是我的代码。

-(IBAction) myplist:(id) sender//the data is saved in a plist by clicking on this button
{
NSLog(@"mylist  Clicked");    

NSMutableArray *array = [[NSMutableArray alloc] init];

[array addObject:searchLabel.text];

   // get paths from root direcory

NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);

// get documents path

NSString *documentsPath = [paths objectAtIndex:0];

// get the path to our Data/plist file

NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"Data.plist"];



// This writes the array to a plist file. If this file does not already exist, it creates a new one.

   [array writeToFile:plistPath atomically: TRUE];
}

3 个答案:

答案 0 :(得分:0)

尝试使用序列将数据存储到pList。

1.从pList中检索旧数据到NSMutableDictionary / NSMutableArray

2.将新记录添加到NSMutableDictionary / NSMutableArray

3.,写入文件

答案 1 :(得分:0)

您无法将数据附加到Plist。由于每次都在执行writeToFile,因此重写了plist文件。因此,最初存储的数据不会存在于其中。实现你想要的唯一另一种方法是从plist中检索数据数组。然后将新的数据对象添加到数组中。使用新附加的数组再次将plist文件写入磁盘。 希望这会有所帮助。

答案 2 :(得分:0)

我认为只需稍微修改一下代码即可达到您的目的。

NSLog(@"mylist  Clicked");    
NSMutableArray *array = [[NSMutableArray alloc] init];


// get paths from root direcory

NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);

// get documents path

NSString *documentsPath = [paths objectAtIndex:0];

// get the path to our Data/plist file

NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"Data.plist"];


//This copies objects of plist to array if there is one
[array addObjectsFromArray:[NSArray arrayWithContentsOfFile:plistPath]];
[array addObject:searchLabel.text];
// This writes the array to a plist file. If this file does not already exist, it creates a new one.

[array writeToFile:plistPath atomically: TRUE];