2012-06-21 38 views
0

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

问题: 我的用户界面只有2个文本字段和1个保存按钮。 1 textfield需要字符串,而另一个需要数字(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]; 
    } 

} 

t这代码工作正常只是它是在写入新值。请帮忙。

回答

0

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

+0

请你通过某种代码解释呢? – SHA

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]; 
+0

没有它,但它没有把任何东西放入ARR我认为(第9行)..并且一旦编译它给SIGABRT错误。 – SHA

+0

从设备上删除旧的应用程序,并再次运行它请 –

+0

这是奥马尔。还是行不通。 P.S.谢谢你的时间! – SHA

相关问题