NSArrayController überträgt Daten nicht Richtig an NSTableView

G

gasometer2

Mitglied
Thread Starter
Dabei seit
29.12.2010
Beiträge
23
Reaktionspunkte
0
Hallo,

ich stehe vor einem Rätsel. Ich füge 1 Objekt zweimal nacheinander in ein ArrayControl ein. Zwischen den Einfügevorgängen setze ich die Werte des Objektes neu. Im Ergebnis landen die letzten Werte 2 Mal im ArrayControl. Kann sich das jemand erklären? Die Objekte haben im Debugger erkennbar die richtigen Werte. Nutze ich im Zweiten Einfügevorgang ein neues Objekt klappt alles wunderbar.


Code:
- (void)DateiVerarbeiten:(NSArrayController *) tabellenArrayController
{
    
    NSError *error;
       
    NSXMLDocument *xmlDaten = [[NSXMLDocument alloc] initWithContentsOfURL:GpxFile options:NSXMLNodePreserveAll error:&error] ;
    
    
    //Dateinamen in Ergebnistabelle schreiben
    
    ListenPaare *neuesPaar = [[ListenPaare alloc] init];
    
    [neuesPaar setTitel:@"Datei:"];
    [neuesPaar setWert:[GpxFile absoluteString]];
    [tabellenArrayController addObject:neuesPaar];   
    
     
    
    
    NSString *xquery = @"/TrainingCenterDatabase/Activities/Activity/Id";
    
    NSArray *result = [xmlDaten objectsForXQuery:xquery error:&error];
    NSXMLNode *firstNode = [result objectAtIndex:0];
    

    
    [neuesPaar setTitel:@"ID:"];
    [neuesPaar setWert:[firstNode stringValue]];
    [tabellenArrayController addObject:neuesPaar];
 

  
    
}
 
Naja, das Verhalten ist schon korrekt. Du fügst eben das gleiche Objekt zweimal ein, genauer gesagt einen Zeiger darauf. Da wird nix kopiert oder so. Und da du die Werte dieses einen Objekt überschreibst sind sie danach (also zum Zeitpunkt wenn die Table View dargestellt wird) halt geändert.
 
  • Gefällt mir
Reaktionen: gasometer2
Ok, danke. Ich hätte gedacht, dass der Controller im Hintergrund kopiert. Aber ok, dann muss ich es halt anders lösen.
 
Der Controller macht garnichts groß ;) Der vermittelt nur vom Model zum View und zurück (Darum solltest Du MVC nachschlagen und begreifen)
 
Zurück
Oben Unten