0

ユーザーがフォームに入力するたびにデータを保存したい plist ファイルに新しい辞書を書き込むのに問題があります。私が現在使用しているコードは、データを上書きするだけで、必要に応じて以前の辞書を保存しません。

ここにコード:

//////////// Save data into plist /////////////////
// 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 text fields
self.titlestring = titleexperiencia.text;
self.descriptionstring = descriptionexperiencia.text;
self.coordinadastring = [self deviceLocation];

// create dictionary with values in UITextFields
NSDictionary *plistDict = [NSDictionary dictionaryWithObjects: [NSArray arrayWithObjects: titlestring, descriptionstring,coordinadastring, nil] forKeys:[NSArray arrayWithObjects: @"Title", @"Description", @"Coordinate", 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];
    NSLog(@"Saved in Data Plist");

}
else 
{
    NSLog(@"Error in saveData: %@", error);
    [error release];
}

writeToFile: の代わりに AddObject: も使用しようとしましたが、アプリがクラッシュします。

4

2 に答える 2

0

エラー変数を過剰に解放しているため、クラッシュが発生している可能性があります。

于 2012-08-07T12:25:02.993 に答える
0

plistPath の内容を読み取ります:
NSMutableData *myData = [NSMutableData dataWithContentsOfFile:plistPath];
そしてこれを変更します:

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

に:

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

最後に myData をファイルに書き込みます。

それが役立つことを願っています!

于 2014-10-14T09:07:27.990 に答える