Во-первых: Я читал вопросы, связанные с этой проблемой несколько раз здесь, и я публикую это с осознанием того, что люди могут считать это дублирующимся вопросом. Но я должен сказать, что, будучи новичком, я не нашел полезной информации, поэтому я с этим вопросом надеюсь сделать вещи очень ясными как для меня, так и для других.Как использовать mutableArrayValueForKey для KVO?
Как я понимаю Наручники & КВЦ/КВО
Рассмотрим это: У меня есть массив (в моем AppDelegate), ArrayController и вид элемента, скажем, NSTableView. Я связал NSMutableArray в своем AppDelegate с ArrayController, который, в свою очередь, связан с NSTableView.
Изменение свойства какого-либо объекта в NSTableView приводит к фактическому изменению свойства этого объекта. Пока это работает. Однако изменение чего-либо в NSMutableArray (например, добавление элемента) не обновляет NSTableView.
Возможные решения я сейчас прочитал о
Я прочитал несколько ответов. Один ответ, казалось, предполагал, что я не должен ничего добавлять к самому массиву, но только к ArrayController. Я не уверен, что это правильно, но если это возможное решение, было бы здорово получить еще несколько подробностей о том, как это сделать.
Другие решения отметить следующие методы:
- valueForKey:
- valueForKeyPath:
- dictionaryWithValuesForKeys:
- valueForUndefinedKey:
- mutableArrayValueForKey:
Особенно:
- mutableArrayValueForKey:
Как использовать mutableArrayValueforKey?
Что я делаю не знаю, как использовать любой из этих методов с моим массивом/внутри моего приложения. Метод mutableArrayValueForKey возвращает NSMutableArray. Должен ли я создать новый массив с этим?
Прямо сейчас, что я делаю, так это.
self.vocabList = [[NSMutableArray alloc] init];
, а позже, в методе, я заполнения массива:
for (NSObject* o in meaningsArray)
{
NSLog(@"%@",o);
Vocab *temp = [[Vocab alloc] init];
[temp setValue:@"w" forKey:@"word"];
[temp setValue:@"m" forKey:@"meaning"];
[self.vocabList insertObject:temp atIndex:[self.vocabList count]];
}
Если все, что я сказал, это правильно до сих пор, на мой вопрос: Где бы mutableArrayValueForKey: прийти в картину когда вы хотите обновить NSTabeleView? Или я неправильно понял что-то в первую очередь?
спасибо, что ТАК. Я добавил наблюдателя, и, похоже, все в порядке. Но я не понимаю, где мне нужно реализовать метод checkchanges и методы changemthinarray? также, когда я пытаюсь добавить что-то в массив, я получаю сообщение «сообщение было получено, но не обработано». :( – chrisnolten
все это часть одного класса (в моем случае это было ViewController) Для начала, попробуйте добавить наблюдателя в 'viewDidLoad', например ' observeValueForKeyPath:.. 'Метод по умолчанию для КВО, так .. положить его где-то в вашем в вашем классе Этот метод вызывается, когда система получения уведомления об изменении объекта А вот, массив уже содержит изменения использование changesmthinarray:. '- (недействительными) removeAllSelectedObjects { int count = [selectedIndexPaths count]; for (int i = count-1; i> -1; i--) { [self removeObjectFromSelectedIndexPathsAtIndex: i] ; } } ' – CheshireKat