Max*_*ion 2 iphone save plist nsmutablearray ios
我试图获得一个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];
Run Code Online (Sandbox Code Playgroud)
而不是覆盖它,我如何修改代码以在每次保存时添加一组新的朋友数据?
iOS*_*wan 10
这里pList表现为一个对象.因此,无论何时尝试将某些内容写入plist,它都将被替换为新数据.
看起来你想将多个朋友的记录保存到plist文件中.您的问题的最佳解决方案是使用核心数据或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];
Run Code Online (Sandbox Code Playgroud)