NSMutableDictionary setObject: forKey - пользовательский класс - PullRequest
0 голосов
/ 21 октября 2011

Я использую это в среде UINavigation. У меня есть customClassA . Он наследует customClassB , и один из его объектов - NSMutableDictionary.

Я выделяю и инициализирую customClassA в viewController, затем для добавления данных я помещаю новый viewController в стек. AddNewDataViewController отправляет вновь добавленные данные, объект customClassB его делегатом. Пока все отлично работает.

customClassA должен хранить возвращенный объект ( customClassB ) в своем объекте NSMutableDictionary с ключом (NSString, созданный из NSDate).

Я получаю сообщение об ошибке "метод мутации отправлен неизменному объекту" и не могу придумать никакого решения. Любая помощь приветствуется.

Спасибо.

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

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 ]

1 голос
/ 21 октября 2011

Убедитесь, что вы инициализируете NSMutableDictionary чем-то вроде

NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init];

Может показаться, что ваш NSMutableDictionary создается с экземпляром NSDictionary вместо NSMutableDictionary

0 голосов
/ 22 октября 2011

Кроме того, я добавил следующий код в реализацию 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;

и вместо того, чтобы манипулировать словарем данных customClassB в моем viewController, я просто вызываю этот метод и передаю объект данных в класс, и он добился цели.

...