0

iOSプログラミングの初心者で、手を汚しています。私はネットで plist のヘルプを検索し、何かを得て、それを理解して使用しましたが、今はある時点で立ち往生しています。私はこの問題をたくさん探しました。しかし、私は正しい答えを見つけることができません。

問題: 私の UI には 2 つのテキスト フィールドと 1 つの保存ボタンしかありません。1 つのテキストフィールドは文字列を受け取り、もう 1 つのテキストフィールドは数値 (int) を入力として受け取ります。

私のplistには、1つの文字列アイテムと1つのintアイテムを持つ1つの辞書アイテムがあります。それでおしまい。

ユーザーから 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];
    }

}

このコードは、新しい値を上書きしているだけで問題なく動作しています。助けてください。

4

2 に答える 2

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];
于 2012-06-21T12:29:54.563 に答える
0

plist はディクショナリを返します。そのディクショナリを NSMutableDictionary として取得し、新しいキー ペアの値をそのディクショナリに追加して保存します。

于 2012-06-21T12:22:57.733 に答える