NSArrayController+привязка какао + основные данные: получить выбранную строку при запуске приложения

Я использую привязку какао, NSArrayController и основные данные. Сразу после запуска приложение должно получить первый элемент, я пробую это в applicationDidFinishLaunching:

1. Entity *ent = arrayManager.arrangedObjects[0];

2. Entity *ent = arrayManager.selectedObjects[0];

---> ошибка о том, что массив пуст. Зачем ?

Другая вещь, которую я не понимаю, это то, что когда приложение появляется, в tableView есть выбранная строка, но когда я регистрирую это:

NSLog(@"selected row in applicationDidFinishLaunching = %li",self.TableViewController.tableView.selectedRow);

log: -1 --> строка не выбрана! Зачем ?


person Red Mak    schedule 11.03.2013    source источник
comment
Итак, arrangedObjects возвращает результаты, а selectedObjects нет?   -  person paulmelnikow    schedule 12.03.2013


Ответы (1)


Вы должны сделать выборку в ArrayController в applicationDidFinishLaunching:, чтобы увидеть там свои сущности. Попробуйте сделать это перед доступом к чему-либо из ArrayController:

 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
     NSError *error;
     [arrayManager fetchWithRequest:nil merge:NO error:&error];
     Entity *ent = arrayManager.arrangedObjects[0];
 }
person macandyp    schedule 12.03.2013
comment
это работа, спасибо, можете ли вы объяснить, почему я должен работать с нулевым запросом на работу? - person Red Mak; 12.03.2013
comment
Абсолютно. Насколько я могу судить, передача nil просто выполняет запрос NSArrayController по умолчанию. Я могу ошибаться, но это именно то, что я видел, чтобы заставить его выполнять запрос по умолчанию, который он делает, когда он загружается в другом месте. - Кроме того, технически вы должны выполнять некоторую обработку ошибок при выполнении запроса. fetchWithRequest:merge:error возвращает BOOL. - person macandyp; 12.03.2013