如何在plist的下一个索引上保存数据

时间:2012-06-21 12:18:17

标签: iphone xcode plist

我是iOS编程的新手,让我的手弄脏了。我在网上搜索了一些plist帮助并得到了一些东西并理解并使用它但现在我陷入了困境。我已经搜索了很多这个问题。但我只是无法为我找到正确的答案。

问题: 我的UI只有2个文本字段和1个保存按钮。 1 textfield采用字符串,而另一个采用number(int)作为输入。

我的plist有1个字典项,有1个字符串项和1个int项。就是这样。

我从用户输入2个UITextViews并通过保存按钮将它们保存到此plist中。

问题在于每当我输入新值并按下保存按钮时,它都会覆盖旧的plist数据。

我发现我需要阅读字典,为它添加新值然后将其保存回来以获得我想要的输出。但我无法抓住这个概念并将其放入代码中。一些带解释的代码会有所帮助。

我的保存按钮的工作方式如下:

-(IBAction)saveit
{
    // get paths from root direcory
    NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);

    // get documents path
    NSString *documentsPath = [paths objectAtIndex:0];

    // get the path to our Data/plist file
    NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"data.plist"];

    // set the variables to the values in the UITextField text1 n text2 respectively

   self.personName = text1.text;
    num = (int)text2.text;    


    // create dictionary with values in UITextFields
    NSDictionary *plistDict = [NSDictionary dictionaryWithObjects: [NSArray arrayWithObjects: personName, num, nil] forKeys:[NSArray arrayWithObjects: @"name", @"phone", nil]];

    NSString *error = nil;

    // create NSData from dictionary
    NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:plistDict format:NSPropertyListXMLFormat_v1_0 errorDescription:&error];

    // check is plistData exists
    if(plistData)
    {
        // write plistData to our Data.plist file
        [plistData writeToFile:plistPath atomically:YES];
    }
    else
    {
        NSLog(@"Error in saveData: %@", error);
       // [error release];
    }

}

这段代码工作得很好,只是它编写了新的值。请帮忙。

2 个答案:

答案 0 :(得分:0)

你的plist将返回一个字典。将该字典恢复为NSMutableDictionary,并将新的密钥对值添加到该字典,然后保存。

答案 1 :(得分:0)

将数据保存为像这样的词典数组

// get paths from root direcory
NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"data.plist"];

//Load the original file
NSMutableArray *arr;
if([[NSFileManager defaultManager] fileExistsAtPath:plistPath])   
     //File exist load
     arr = [[NSMutableArray alloc] initWithContentsOfFile:plistPath];
else
    //File does not exist create
    arr = [[NSMutableArray alloc] init];

//Create dictionary
NSDictionary *plistDict = [NSDictionary dictionaryWithObjects: [NSArray arrayWithObjects: personName, num, nil] forKeys:[NSArray arrayWithObjects: @"name", @"phone", nil]];

//Append to arr
[arr addObject:plistDict];

//Save to file
[arr writeToFile:plistPath atomically:YES];