2014-01-19 21 views
7

Also bin ich an iOS-Entwicklung gewöhnt, also bin ich ziemlich glücklich mit NSFetchedResultsController. Dies ist jedoch in der Mac OS X-Umgebung nicht vorhanden. Ich weiß, dass ich NSArrayController als Ersatz verwenden kann. Ich könnte diese Klasse schrecklich falsch gebrauchen, aber es hat bis jetzt funktioniert. ich initialisieren NSArrayController wie folgt:Mac OS X Ersatz für 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); 

Dann habe ich auf Veränderungen des NSManagedObjectContext hören und holen und die NSTableView nachladen wie folgt:

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

    [self.tableView reloadData]; 

Wie ich bereits erwähnt, könnte ich dies völlig verwenden falsch, aber ich mag keine Bindungen verwenden. Nun zum eigentlichen Problem: Eine andere Klasse der Anwendung könnte ein NSManagedObject löschen, das von NSArrayController gehalten wird. Der NSArrayController gibt dieses gelöschte Objekt sofort frei und macht es mir unmöglich, herauszufinden, welches Objekt das war. Das letzte Ziel besteht darin, zu wissen, welches Objekt an welchem ​​Index gelöscht wurde, damit ich die Zeilen von NSTableView animieren kann.

Ich hoffe, es ist klar, was ich anstrebe. Danke für jede Hilfe

+0

Warum nicht Sie Bindungen mögen? – Wain

+0

Nun, die NSTableCellViews sind eher benutzerdefiniert. Wäre es nicht viel schwieriger, Bindungen zu verwenden? – lbrndnr

Antwort

2

gibt es keine Abschnitte in einem NSTableView so gibt es keine 1: 1-Ersatz

ABER NSArrayController ist eine enge Übereinstimmung! Außerdem werden CoreData-Entitäten abgerufen und sortiert.

Für die UI Sie Zuordnungen, dann verwenden würde (aber natürlich müssen Sie nicht auf)


z.B. siehe:

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

+1

Beachten Sie, dass Sie keine Bindungen verwenden müssen! Ein NSArrayController kann natürlich direkt verwendet werden. –

+0

Etwas wie ein NSOutlineView könnte als ein genauerer Ersatz für eine UITableview mit Abschnitten gedacht werden. – Abizern

+0

ja, was er nicht will;) Ich habe nur Abschnitte referenziert, um zu sagen, dass es keine ios-ähnliche geholteResultsController gibt –