NSMutableDictionary setObject:forKey - 自定义类

时间:2011-10-21 15:59:17

标签: cocoa nsmutabledictionary

我在UINavigation环境中使用它。 我有 customClassA 。它继承了 customClassB ,其中一个对象是NSMutableDictionary。

我在viewController中分配和初始化customClassA,然后为了添加数据,我将一个新的viewController推入堆栈。 addNewDataViewController通过其委托发回新添加的数据, customClassB 对象。到目前为止一切正常。

customClassA 必须使用密钥(从NSDate创建的NSString)将返回的对象( customClassB )存储到其NSMutableDictionary对象中。

我得到“变异方法发送到不可变对象”的错误,并没有想到任何解决方案。 任何帮助表示赞赏。

感谢。

===========================

interface customClassA : NSObject
{
    NSDate date;
    NSArray *array; // will contain only NSString objects
}
// and the rest as customary
...

#import "customClassA.h"
interface customClassB : NSObject
{
    NSString *title;
    NSMutableDictionary *data; // will contain values of customClassA with keys of NSString
}
// and the rest as customary

...

#import "customClassB"
#interface firstViewController : UITableViewController <SecondViewControllerDelegate>
- (void)viewDidLoad
{
      self.customClassB_Object = [customClassB alloc] init];
      //  and the rest...
}

- (void)secondViewControllerDidSaveData:(customClassA *)aData
{
    [self.customClassB_Object.data setObject:aData forKey:[NSString stringWithFormat:@"%@", aData.date]];
    // update tableView
}

2 个答案:

答案 0 :(得分:1)

确保使用类似

的内容初始化NSMutableDictionary
NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init];

您的NSMutableDictionary似乎是使用NSDictionary实例创建的,而不是NSMutableDictionary

答案 1 :(得分:0)

Althoguh我将以下代码添加到customClassB实现中,它仍然无效。

#implementation customClassB
- (id)init
{
      self = [super init];
      if (self)
          self.data = [NSMutableDictionary alloc] init];
      return self;
}

所以我在customClassB实现中添加了两个自定义方法,并在头文件中添加了:

- (void)appendData:(customClassA *)aData;
- (void)removeDataWithKey:(NSString *)aKey;

而不是在我的viewController中操作customClassB的数据代码,我只是调用该方法并将数据对象传递给类,它就可以实现。