1

я настроить NSTableView, столбцы которой связаны с NSArrayController который получает содержимое из NSMutableArray (Matches) из NSMutableDictionary экземпляров.содержания NSTableView не обновляется должным образом

Хотя вещь это работает, я испытываю эту проблему:

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

Любые идеи по этому поводу? Как я мог сделать перерисовать представление/обновить содержимое?


Подсказки:

  • Я также использовал [tableView reloadData] после обновления моего Matches массива, но без эффекта.
  • Это происходит не всегда, но несколько раз ... (это требует некоторого терпения и щелкает здесь-и-там или сводит к минимуму приложение, пока не появится содержимое).

ответ

4

Похоже, что вы манипулируете массивом напрямую. Если это так, вы делаете это «за спиной контроллера», так сказать. Он не получает никакого уведомления о том, что массив изменился.

В идеале контроллер массива должен быть объектом, ответственным за добавление и удаление объектов из своей модели; вы должны использовать addObject: и removeObject: (или аналогичные) на контроллере , а не на самом массиве.

В противном случае вы можете выдавать уведомления KVO (willChangeValueForKey: и didChangeValueForKey:) при манипулировании массивом; что заставит контроллер забрать изменения.

+2

Выдача уведомлений KVO вручную должна быть последней инстанцией. Лучше использовать [KVO-совместимые индексированные методы доступа] (https://developer.apple.com/library/mac/documentation/cocoa/conceptual/KeyValueCoding/Articles/AccessorConventions.html#//apple_ref/doc/uid/20002174 -SW4), чтобы мутировать массив. Я даже предпочел бы, чтобы обмен сообщениями с контроллером. Если вы вручную излучаете KVO-уведомления, лучше использовать специфичные для массива символы '-willChange: valuesAtIndexes: forKey:' и '-didChange: valuesAtIndexes: forKey:'. Они позволяют наблюдателям делать более эффективные операции в ответ. –

+0

Спасибо большое! Это ** работает ** (Baaah! Я использовал столы и привязки и прочее, как 1000 раз, и у меня все еще не хватает вещей, хотя я определенно наткнулся на них в прошлом и, вероятно, исправил их также ...) –

Смежные вопросы