将字符串保存为plist删除旧数据

时间:2017-04-14 04:28:31

标签: ios objective-c 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");
}

如何在不丢失旧数据的情况下添加新词典?

1 个答案:

答案 0 :(得分: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];

}