2014-01-19 3 views
7

Итак, я привык к разработке iOS, поэтому я очень доволен NSFetchedResultsController. Однако этого нет в среде Mac OS X. Я знаю, что я могу использовать NSArrayController в качестве замены. Я мог бы использовать этот класс ужасно неправильно, но он работал до сих пор. я инициализировать NSArrayController следующим образом:Замена Mac OS X для NSFetchedResultsController

NSArrayController* newConversationsController = [NSArrayController new]; 
newConversationsController.managedObjectContext = context; 
newConversationsController.entityName = entityName; 
newConversationsController.sortDescriptors = sortDescriptors; 
newConversationsController.automaticallyRearrangesObjects = YES; 

NSError* error = nil; 
[newConversationsController fetchWithRequest:nil merge:NO error:&error]; 
NSCAssert(!error, error.description); 

Тогда я слушаю изменений NSManagedObjectContext и выборки и перезагрузить NSTableView следующим образом:

 [self.conversationsController fetchWithRequest:nil merge:YES error:&error]; 
    NSAssert(!error, error.description); 

    [self.tableView reloadData]; 

Как я уже упоминал ранее, я мог бы использовать это полностью неправильно, но я не люблю использовать привязки. Теперь к актуальной проблеме: другой класс приложения может удалить объект NSManagedObject, хранящийся NSArrayController. NSArrayController мгновенно освобождает этот удаленный объект и не позволяет мне выяснить, какой именно объект был. Конечная цель - узнать, какой объект был удалён, чтобы я мог анимировать строки NSTableView.

Надеюсь, это ясно, на что я нацелен. Спасибо за любую помощь

+0

Почему вы не любите привязки? – Wain

+0

Ну, NSTableCellViews довольно обычны. Разве не было бы намного сложнее использовать привязки? – lbrndnr

ответ

2

нет разделов в NSTableView так нет 1: 1 замены

НО NSArrayController близкого матча! Он также извлекает и сортирует объекты CoreData.

Для пользовательского интерфейса вы используете привязки, то (но, конечно, вы не должны)


например см:

http://cocoadevcentral.com/articles/000080.php

+1

Обратите внимание, что вам не нужно использовать привязки! NSArrayController можно, конечно, использовать напрямую –

+0

Что-то вроде NSOutlineView можно рассматривать как более близкую замену UITableview с разделами. – Abizern

+0

да, которого он не хочет;) Я просто ссылался на разделы, чтобы сказать, что нет ios-like fetchedResultsController –