arrayController "valueForUndefinedKey": почему он немедленно очищается? - PullRequest
1 голос
/ 25 апреля 2011

Мое приложение имеет 2 окна, в обоих из которых отображаются объекты NSScrollView, управляемые контроллером. В основном первый имеет данные, второй имеет надлежащую агрегацию данных. Оба полагаются на реализацию класса NSArrayController.

Я правильно спроектировал оба окна (по крайней мере, мне так кажется), но я получаю эту ошибку:

    [<MyDocument 0x1020257c0> valueForUndefinedKey:]: 
this class is not key value coding-compliant for the key <MY_ARRAY>.

Единственный способ решить эту проблему - немедленно создать экземпляр (я имею в виду, когда готовится первое окно) второй массив и заполнить его некоторыми значениями следующим образом:

NSMutableArray *newAggregates = [NSMutableArray array];

    [newAggregates addObject:
     [NSMutableDictionary dictionaryWithObjectsAndKeys:
      [NSString stringWithString:@"category"], @"category",
      [NSString stringWithString:@"subcategory"], @"subcategory",
      [NSNumber numberWithFloat:0.0], @"amount_1",
      [NSNumber numberWithFloat:0.0], @"amount_2",
      [NSNumber numberWithFloat:0.0], @"amount_3",
      [NSNumber numberWithFloat:0.0], @"amount_4",
      [NSNumber numberWithFloat:0.0], @"amount_5",
      [NSNumber numberWithFloat:0.0], @"amount_6",
      [NSNumber numberWithFloat:0.0], @"amount_7",
      [NSNumber numberWithFloat:0.0], @"amount_8",
      [NSNumber numberWithFloat:0.0], @"amount_9",
      [NSNumber numberWithFloat:0.0], @"amount_10",
      [NSNumber numberWithFloat:0.0], @"amount_11",
      [NSNumber numberWithFloat:0.0], @"amount_12",
      [NSNumber numberWithFloat:0.0], @"total",
      nil]];

    [self setAggregates:newAggregates];

Это работает, но это не то, что я хотел, я хочу, чтобы второй массив выполнялся только опционально, если и только если пользователь нажимает определенную кнопку.

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

1 Ответ

1 голос
/ 26 апреля 2011

Я не знаю, почему ваш обходной путь работает (возможно, ваш метод setAggregates: предотвращает вызов, который в конечном итоге вызывает ошибку?).Ошибка означает, что у вас есть что-то привязанное к свойству с именем <MY_ARRAY> в вашем объекте документа.Я предполагаю, что это, вероятно, привязка Content одного из ваших контроллеров массива.Вам нужно изменить его на фактическое имя свойства, используемого в вашем классе.

...