0

(Этот пример проект здесь https://github.com/danieljfarrell/BindingToPopUpButtons)Переплет NSMutableArray к NSPopUpButton и вставляя новых значений

Я просто получаю в привязки, но у меня есть NSPopUpButton привязанного к NSArrayController, который управляет массивом контента в моем AppDelegate (модель), и все работает хорошо! Однако он работает только для статических объектов, которые добавляются в массив содержимого в методе -init. У меня проблемы, когда я мутирую массив содержимого (вставка, добавление и т. Д.).

Songs loaded in -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-совместимого способа?

Mutating the data source

// 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, содержащийся в массиве упорядоченных объектов).
+0

Почему вы не создать NSDictionary и добавить к контроллеру массива? – Volker

+0

Я только что обновил выше. Это то, что вы имели в виду? Выполнение этого дает аналогичную ситуацию, вы все равно получаете '-description' всего массива. –

ответ

2

Я думаю Volker означает создать выход для вас NSArrayController и сделать что-то вроде этого

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

  • Нет связанных вопросов^_^