[英]Saving IOS data to plist
我正在将这些数据写入plist文件,但是每次写入时,它都会替换以前的内容。 也就是说,它会覆盖我重新加载页面时以前拥有的所有数据。 我如何才能保留以前的数据,或者有人可以指出我的操作不正确?
- (IBAction)buttonClickSave:(id)sender;
{
pathList=[self getFilePath];
if(![[NSFileManager defaultManager] fileExistsAtPath:pathList])
{
[[NSFileManager defaultManager] copyItemAtPath:[[NSBundle mainBundle] pathForResource:@"adresses" ofType:@"plist" ]toPath:pathList error:nil];
}
NSString *Name = @"Names";
NSString *email = @"email";
NSString *phone = @"phone";
NSMutableArray *values = [[NSMutableArray alloc] initWithObjects:Name, email, phone, nil];
NSMutableArray *keys = [[NSMutableArray alloc] initWithObjects:kTitleKey, kEmail, kPhone, nil];
NSDictionary *dict = [[NSDictionary alloc] initWithObjects:values forKeys:keys];
[self.arraysData addObject:dict];
[self.arraysData writeToFile:pathList atomically:YES];
}
您要做的就是从plist读取所有数据,然后追加数据并将此数据写入plist
读取所有数据
NSMutableArray *plistArray = [NSMutableArray arrayWithContentsOfFile:pathList];
追加数据
[plistArray addObject:YOURDATA];
然后像这样写你的数组
[dict writeToFile:plistpath atomically:YES];
要初始化数组,请使用现有文件作为其源。 这将确保您添加的任何条目都不会覆盖,而是对现有数据进行更改。
因此,无论您在哪里初始化arraysData
, arraysData
使用以下代码:
arraysData = [NSMutableArray arrayWithContentsOfFile: [self getFilePath]];
插入之前,您将在plist中获得所有数据值。 在将数据与您的逻辑或示例进行比较之后,使用一种方法插入数据而没有覆盖
// get plist paths from root directory
NSArray *plistPath = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
// get documents path
NSString *documentsPathPlist = [paths objectAtIndex:0];
NSString *plistDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0]; // get the path to our plist file
NSLog(plistDirectory);
NSString *plistPathRoot = [plistDirectory stringByAppendingPathComponent:@"Sample.plist"];
//This copies objects of plist to array if there is one
[array addObjectsFromArray:[NSArray arrayWithContentsOfFile:plistPathRoot]];
//If plist has less than 10 items, insert the new data. Don't use lastInsertionIndex. Else, replace one of the items.
if([array count] < 10)
{
[array addObject:[textName.text]];
}
else
{
//Update the lastInsertionIndex
lastInsertionIndex++;
lastInsertionIndex %= 10; //// array size = 10
[array replaceObjectAtIndex:lastInsertionIndex withObject:[textName.text]];
}
[array writeToFile:plistPath atomically: TRUE];
另一个:
下面的链接也通过示例项目对Plist Without Overwrite进行了大量解释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.