3

以下のコードを使用して新しい配列を plist に追加していますが、アプリのテキストフィールドに新しい配列を追加するたびに、新しいキーがあっても古い配列が上書きされます..何かアイデアはありますか?

- (IBAction)saveViewerItems
{
    // 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.data = [[NSMutableArray alloc] initWithCapacity:20];


    // create dictionary with values in UITextFields
    NSDictionary *plistDict = [NSDictionary dictionaryWithObjects: [NSArray arrayWithObjects: data, nil] forKeys:[NSArray arrayWithObjects: (@"%@", text), 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];
    }
}
4

2 に答える 2

3

すでにファイルにある辞書を取得するには、次を使用します。

NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithContentsOfFile:(NSString *)filePath];

(別のキーを使用して)そのディクショナリに別の配列を書き込むには、次を使用します。

[dictionary setObject:(id)myArray forKey:(NSString *)myKey];

ファイルに書き戻すには、次を使用します。

[dictionary writeToFile:(NSString *)filePath atomically:YES];

NSDataクラスを使用する必要はありません。詳細については、AppleNSDictionaryClassをご覧ください。

于 2013-02-13T15:19:24.547 に答える
1

これを試してみてください

    // 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"];

    NSMutableDictionary *plist = [[NSDictionary dictionaryWithContentsOfFile:plistPath] mutableCopy];

    // set the variables to the values in the text fields
    self.data = [[NSMutableArray alloc] initWithCapacity:20];

   [plist setObject:[NSArray arrayWithObjects: data, nil] forKey:forKeys:[NSArray arrayWithObjects: (@"%@", text)];
   [plist writeToFile:path atomically:YES];
   [plist release];
于 2013-02-13T15:20:55.977 に答える