Ich habe eine NSMutableArray
(mit NSMutableDictionary
Instanzen) bekam gebunden an eine NSArrayController
(die NSArrayController
wiederum an NSTableView
Spalten gebunden).Der beste Weg, um einen NSArrayController zu einem NSMutableArray verwaltet hinzufügen/entfernen
Was ist die Kakao- und KVO- freundliche Art und Weise von, programmatisch:
- ein neues leeres Objekt Hinzufügen (
NSMutableDictionary
) auf das Array? - das aktuell ausgewählte Objekt entfernen? (Nach dem Entfernen das vorherige Element - falls vorhanden - sollte gewählt werden)
Ich habe immer dies in einer Art und Weise getan, kann ich nicht besonders gut gefällt - und ich bin sicher, es ist nicht der beste Weg, um (zu viele Codezeilen für etwas so einfaches: in Cocoa, das eine falsche Sicht auf das Thema anzeigt :-)).
Mein Code (ein ziemlich übertrieben, tatsächlich):
Zusätzlich zu dem Array
NSMutableArray* oldParams = [paramsArray mutableCopy];
[oldParams addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:@"Parameter",@"Parameter",@"",@"Value", nil]];
[self setParamsArray:oldParams];
[paramsController setSelectionIndex:[paramsArray count]-1];
Entfernen derzeit sele cted Objekt aus dem Array
if ([paramsArray count]>0)
{
int s = [paramsController selectionIndex];
NSMutableArray* oldParams = [paramsArray mutableCopy];
[oldParams removeObjectAtIndex:s];
[self setParamsArray:oldParams];
if (s<=[paramsArray count]-1)
[paramsController setSelectionIndex:s];
else
[paramsController setSelectionIndex:[paramsArray count]-1];
}
Also, was auf, dass Ihre Meinungen sind?
Ich bekomme ein 'Programm empfangenes Signal:" EXC_BAD_ACCESS "' in beiden Fällen ... Irgendwelche Ideen? –
@ Dr.Kameleon: Möglicherweise. Stellen Sie sicher, dass bei jeder vorherigen Verwendung des Array-Controllers die Verwendung von 'setContent:' nicht enthalten ist (obwohl ich festgestellt habe, dass die Verwendung von Bindings dazu am Anfang funktioniert). Und natürlich sollte Ihr Backing-Array ein gültiges, zugewiesenes 'NSMutableArray' sein. – trudyscousin
Mein Hintergrund-Array ist absolut gültig. Die Sache ist, ich kann jede Art von Verarbeitung direkt auf das Array tun, aber Ihre Ansatz (mit dem Controller direkt mit dem Array zu handhaben) hat nie wirklich für mich gearbeitet ... –