2014-01-19 74 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]; 

正如我前面提到的,我可能會使用這種完全錯了,但我不喜歡使用綁定。 現在到了實際問題:應用程序的另一個類可能會刪除NSArrayController持有的NSManagedObject。 NSArrayController立即釋放這個被刪除的對象,並使我無法找出那是哪個對象。最終目標是要知道哪些對象的哪些索引已被刪除,以便可以對NSTableView的行進行動畫處理。

我希望這很清楚我的目標。 感謝您的幫助

+0

你爲什麼不喜歡綁定? – Wain

+0

那麼NSTableCellViews是相當自定義的。那麼使用綁定不會更難嗎? – lbrndnr

回答

2

有一個NSTableView的任何部分,因此不存在1:1置換

但NSArrayController的是一場勢均力敵的比賽!它還提取和排序CoreData實體。

對您想要使用綁定,則UI(當然你必須不)


例如見:

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

+1

請注意,您不必使用綁定!一個NSArrayController當然可以直接使用 –

+0

類似於NSOutlineView的東西可能被認爲是更接近部分UITableview的替代品。 – Abizern

+0

是的,他不想要的;)我只是引用部分來說,沒有ios樣的fetchedResultsController –