我试图获取一个 plist 来存储多组数据,但每次保存(使用 ActionSheet 中的按钮)时,它都会覆盖前一组数据。我想添加多个“朋友”及其数据。我不太热衷于使用 Core Data,所以我想知道如何使用 Plist 来做到这一点。
这是保存按钮的代码:
NSMutableDictionary *friend = [[NSMutableDictionary alloc] init];
NSMutableDictionary *array = [[NSMutableDictionary alloc]init];
[array setObject:friendName.text forKey:@"Name"];
[array setObject:friendPhone.text forKey:@"Phone Number"];
[array setObject:friendEmail.text forKey:@"Email Address"];
[array setObject:friendChatSN.text forKey:@"Chat Screen Name"];
[friend setValue:array forKey: @"Friend Data"];
NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"FriendList.plist"];
[friend writeToFile:plistPath atomically: TRUE];
如何修改代码以在每次保存时添加一组新的好友数据,而不是覆盖它?
这里 pList 表现为一个单一对象。因此,每当您尝试向 plist 写入内容时,它都会被新数据替换。
看起来您想将多个朋友记录保存到 plist 文件。您的问题的最佳解决方案是使用 core data 或 sqlite。但如果你想使用 plist 来实现它,那么首先从 plist 获取旧数据,然后将新数据(朋友)添加到旧数据,然后保存到 plist 应该可以解决。
根据您的要求,您应该保存NSArray
与多个NSDictionary
(朋友记录)pList 对象。
这是修改后的代码
NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"FriendList.plist"];
NSMutableArray *friend = [NSMutableArray arrayWithContentsOfFile:plistPath];
if (nil == friend) {
friend = [[NSMutableArray alloc] initWithCapacity:0];
}
else {
[friend retain];
}
NSMutableDictionary *array = [[NSMutableDictionary alloc]init];
[array setObject:friendName.text forKey:@"Name"];
[array setObject:friendPhone.text forKey:@"Phone Number"];
[array setObject:friendEmail.text forKey:@"Email Address"];
[array setObject:friendChatSN.text forKey:@"Chat Screen Name"];
[friend addObject:array];
[array release];
[friend writeToFile:plistPath atomically: TRUE];
[friend release];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)