2011-10-06 42 views
0

我一直在试图添加一个对象作为NSMutableDictionary到我的数组,我从另一个视图访问,它似乎并没有工作。我希望能够将数据存储在我从NSDictionary访问的plist中。使用NSMutableDictionary保存一个对象到数组

-(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]; 
} 

UPDATE:我如何添加一个NSDictionary到我的plist数据库(我的数据库是一个数组)?

这是一些新的代码,我更新了NSMutableDictionary为NSDictionary,因为在我的plist中,只能有正常的字典而不是可变的字典。但现在它坠毁并给了我一个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]; 

}

+0

你得到什么错误? – hypercrypt

+0

我没有得到任何错误,它只是不起作用。 – Souljacker

回答

2

首先,您应该使用setObject:forKey:方法将对象添加到NSMutableDictionary。其次,如果您使用的是NSDictionary,则应使用initWithObjectsAndKeys:方法。

setValue:forKey密钥值编码协议的方法。这是在这里“ Where's the difference between setObject:forKey: and setValue:forKey: in NSMutableDictionary?

如此描述,你应该做的,

NSDictionary *newAlarm = [[NSDictionary alloc] initWithObjectsAndKeys: 
               labelTextField.text, LABEL_KEY, 
               alarmPicker.date, TIME_KEY, nil]; 
+0

谢谢,这解决了我的问题,但我遇到了一个新问题。存储在字典中的数据,我如何将它添加到我的plist?我的意思是我已经尝试writeToFile并试图将其添加到数组,但我不能。我会提出一些新的代码。 – Souljacker

1
[newAlarm setValue:alarmPicker.date forKey:TIME_KEY]; 

我不是相当肯定,但我想你的错误是因为你不能发送一个NSDate对象的实例setValue:forKey方法。你可以使用setObject:forKey或者将NSDate改为NSString [NSString stringWithFormat:"%@", alarmPicker.date]

希望有所帮助。

+0

'setObject:forKey',而不是'setValue:forKey' – Abizern

相关问题