2017-04-14 114 views
0

我成功地添加了我的字典到plist,但是当我第二次添加时,它从我的plist中删除我的旧字典。 这里是我的代码:保存字符串到plist删除旧数据

NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsPath = [paths objectAtIndex:0]; 
NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"favQuote.plist"]; 


NSDictionary *plistDict = [[NSDictionary alloc] initWithObjectsAndKeys:self.txtQuote.text,@"quote",self.lblAuthor.text,@"author",nil]; 

NSError *error = nil; 
NSData *plistData = [NSPropertyListSerialization dataWithPropertyList:plistDict format:NSPropertyListXMLFormat_v1_0 options:NSPropertyListWriteStreamError error:&error]; 

if(plistData) 
{ 
    [plistData writeToFile:plistPath atomically:YES]; 
    NSLog(@"Data saved sucessfully"); 
} 
else 
{ 
    NSLog(@"Data not saved"); 
} 

如何添加我的新字典,而不会丢失旧的数据?

+0

第二次它写字典名称相同! – kb920

+0

是的,我必须将我的dic添加到plist,它具有相同的密钥 –

+0

如果您使用相同的密钥名称,那么它会覆盖旧数据的新数据。 – kb920

回答

0

可以储存您的阵列的字典在你的文档目录类似,

NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsPath = [paths objectAtIndex:0]; 
NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"favQuote.plist"]; 

NSFileManager *manager = [NSFileManager defaultManager]; 

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

if ([manager fileExistsAtPath:plistPath]) { 

    NSData *data = [NSData dataWithContentsOfFile:plistPath]; 
    arr = (NSMutableArray*)[NSKeyedUnarchiver unarchiveObjectWithData:data]; 


} 


NSDictionary *plistDict = [[NSDictionary alloc] initWithObjectsAndKeys:@"test",@"quote",@"test2",@"author",nil]; 

[arr addObject:plistDict]; 


NSData *plistData = [NSKeyedArchiver archivedDataWithRootObject:arr]; 



if(plistData) 
{ 
    [plistData writeToFile:plistPath atomically:YES]; 
    NSLog(@"Data saved sucessfully"); 
} 
else 
{ 
    NSLog(@"Data not saved"); 
} 

然后你可以检索和使用你的价值观一样,

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

if ([manager fileExistsAtPath:plistPath]) { 

    NSData *data = [NSData dataWithContentsOfFile:plistPath]; 
    arr1 = (NSMutableArray*)[NSKeyedUnarchiver unarchiveObjectWithData:data]; 


} 
if (arr1.count > 0) { 

    NSDictionary *firstDic = [arr1 objectAtIndex:0]; 

}