(Этот пример проект здесь https://github.com/danieljfarrell/BindingToPopUpButtons)Переплет NSMutableArray к NSPopUpButton и вставляя новых значений
Я просто получаю в привязки, но у меня есть NSPopUpButton привязанного к NSArrayController, который управляет массивом контента в моем AppDelegate (модель), и все работает хорошо! Однако он работает только для статических объектов, которые добавляются в массив содержимого в методе -init
. У меня проблемы, когда я мутирую массив содержимого (вставка, добавление и т. Д.).
// AppDelegate.m
- (id)init
{
self = [super init];
if (self) {
_songs = [[NSMutableArray alloc] init];
NSMutableDictionary *song1 = [NSMutableDictionary dictionaryWithDictionary:@{@"title" : @"Back in the USSR"}];
NSMutableDictionary *song2 = [NSMutableDictionary dictionaryWithDictionary:@{@"title" : @"Yellow Submarine"}];
[_songs addObjectsFromArray:@[song1, song2]];
}
return self;
}
Проблема. Когда я мутирую массив содержимого с помощью -mutableArrayValueForKey:
, вставив новую песню, NSPopUpButton отображает -description
из массива, а не значение элементов массива, а также, похоже, дублируется массив. В этом простом случае, когда модель является только NSMutableDictionary, как я могу правильно мутировать массив содержимого с помощью KVO-совместимого способа?
// AppDelegate action method from button click
- (IBAction)addNewSong:(id)sender {
// Grab the new song title from a text field
NSString *newSong = self.songTextField.stringValue;
// Grab the insert index from a text field.
NSInteger index = self.indexTextField.integerValue;
/* Here I want the array controller to
create a new NSMutableDictionary
and set the title key with the new song. */
[[self.songs mutableArrayValueForKey:@"title"] insertObject:newSong atIndex:index];
/* I also tried adding a dictionary but ran into a similar problem...*/
// [[self.songs mutableArrayValueForKey:@"title"] insertObject:[@{@"title" : newSong} mutableCopy] atIndex:index];
}
привязок для NSPopUpButton стандартны:
Содержание
- Привязка к: массива контроллера ключ
- Контроллер: arrangedObjects
Содержание Значение
- Привязка к: массива контроллера ключа
- Контроллер: arrangedObjects
- Модель ключевой путь: title (ключ элементов NSDictionary, содержащийся в массиве упорядоченных объектов).
Почему вы не создать NSDictionary и добавить к контроллеру массива? – Volker
Я только что обновил выше. Это то, что вы имели в виду? Выполнение этого дает аналогичную ситуацию, вы все равно получаете '-description' всего массива. –