Сохранение объекта в массив с использованием NSMutableDictionary - PullRequest
0 голосов
/ 07 октября 2011

Я пытался добавить объект как NSMutableDictionary в мой массив, к которому я обращаюсь из другого представления, и это, похоже, не работает. Я хочу иметь возможность хранить данные в списке, доступ к которому я получаю из NSDictionary.

-(void)saveAlarm:(id)sender {

    // Adding object for alarm to AlarmViewController

    alarmArrayCopy = alarmViewController.alarmsTime;

    NSMutableDictionary *newAlarm =  [[NSMutableDictionary alloc] init];
    [newAlarm setValue:labelTextField.text forKey:LABEL_KEY];
    [newAlarm setValue:alarmPicker.date forKey:TIME_KEY];
    [alarmArrayCopy addObject:(newAlarm)];

    // Dismissing and tiding up.

    [self.navigationController dismissModalViewControllerAnimated:YES];
    [newAlarm release];
}

ОБНОВЛЕНИЕ: Как добавить NSDictionary в мою базу данных plist (моя БД - это массив)?

Вот новый код, я обновил NSMutableDictionary до NSDictionary, потому что в моем списке может быть только обычный словарь, а не изменяемый. Но теперь он разбился и дает мне Thread 1:Program received signal: "SIGABRT".

NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"data.plist"];

// Adding object for alarm to AlarmViewController

NSDictionary *newAlarm =  [[NSDictionary alloc] init];
[newAlarm setValue:labelTextField.text forKey:LABEL_KEY];
[newAlarm setValue:[NSString stringWithFormat:@"%@", alarmPicker.date] forKey:TIME_KEY];
[newAlarm writeToFile:finalPath atomically:NO];

или

- (IBAction) saveAlarm: (id) отправитель {

// Adding object for alarm to AlarmViewController

NSString *time = [NSString stringWithFormat:@"%@", alarmPicker.date];
NSString *label = [NSString stringWithFormat:@"%@",labelTextField.text];

NSDictionary *newAlarm = [[NSDictionary alloc] initWithObjectsAndKeys:label, LABEL_KEY,time, TIME_KEY, nil];
self.alarmArrayCopy = alarmViewController.alarmsTime;
[alarmArrayCopy addObject:(newAlarm)];

// Dismissing and tiding up.
[newAlarm release];
[self.navigationController dismissModalViewControllerAnimated:YES];

}

Ответы [ 2 ]

2 голосов
/ 02 ноября 2011

Во-первых, вы должны использовать метод setObject:forKey: для добавления объектов в NSMutableDictionary.Во-вторых, вы должны использовать метод initWithObjectsAndKeys:, если вы используете NSDictionary.

. setValue:forKey - это метод протокола Key Value Coding .Это было описано здесь: « Где разница между setObject: forKey: и setValue: forKey: в NSMutableDictionary? »

Итак, вы должны это сделать,

NSDictionary *newAlarm = [[NSDictionary alloc] initWithObjectsAndKeys:
                                               labelTextField.text, LABEL_KEY,
                                               alarmPicker.date, TIME_KEY, nil];
1 голос
/ 21 октября 2011
[newAlarm setValue:alarmPicker.date forKey:TIME_KEY];

Я не совсем уверен, но думаю, ваша ошибка в том, что вы не можете отправить экземпляр объекта NSDate в метод setValue: forKey. Вы можете использовать либо setObject: forKey, либо изменить NSDate на NSString на [NSString stringWithFormat:"%@", alarmPicker.date].

Надеюсь, это поможет.

...