繁体   English   中英

将IOS数据保存到plist

[英]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];

要初始化数组,请使用现有文件作为其源。 这将确保您添加的任何条目都不会覆盖,而是对现有数据进行更改。

因此,无论您在哪里初始化arraysDataarraysData使用以下代码:

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进行了大量解释。

如何对停止改写数据,IOS

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM