Domanda

Questa è una domanda molto newbie, e questo è qualcosa che ho fatto molte volte prima, ma c'è qualcosa che mi manca questa volta.

Nel mio file AppDelegate.h dichiaro un NSArray e impostarlo come una proprietà:

@interface AppDelegate : NSObject {
NSArray *lines;

}

@property(readwrite, retain) NSArray *lines;
@end

E poi nel file AppDelegate.m nel metodo awakeFromNib I Alloc che:

lines = [[NSArray alloc] init];

Poi ho un metodo che imposta la matrice linee:

NSString *fileContents = [NSString stringWithContentsOfFile:[NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/sometextfile.txt"] encoding:NSUTF8StringEncoding error:NULL];
lines = [fileContents componentsSeparatedByString:@"\n"];

Ho un array questo è controllore tenuti a AppDelegate.self.lines poi Ho una colonna della tabella vincolato a Array Controller.arrangedObjects. Posso confermare che l'array viene aggiornato (testato utilizzando NSLog) tuttavia i contenuti della tabella non vengono aggiornamento (rimane vuoto).

C'è qualcosa di ovvio che mi manca qui?

È stato utile?

Soluzione

Non hai bisogno di una fonte di dati se si sta utilizzando Associazioni. Uno o l'altro.

  

Ho un array di controller questo è destinato a "AppDelegate.self.lines" ...

Perché self?

  

@property (readwrite, trattenere) NSArray * linee;

No, utilizzare copy qui. In caso contrario, vi ritroverete a trattenere serie mutevole di qualcun altro, che saranno poi mutare. Poi la “tua” matrice sarà cambiato senza di voi saperlo.

  

Poi ho un metodo che imposta la matrice linee:

lines = [fileContents componentsSeparatedByString:@"\n"];

Questo è il motivo per cui la tabella non mostra nulla. Tu non stai andando attraverso la proprietà, si sta accedendo direttamente la variabile di istanza. istanza diretta accessi variabili non causano notifiche KVO, in modo che il controller di array non scopre il cambiamento.

Ancora peggio, si sta perdendo il vecchio array (dal momento che è sufficiente assegnare su di esso senza rilasciarlo) e sotto-mantenendo questo nuovo array. Perché non sei mantenendo il nuovo array, che variabile di istanza terrà un oggetto morto a breve. Il ritegno automatica viene eseguita con il metodo setLines:, che solo viene chiamata quando si chiama.

È necessario passare attraverso la proprietà:

self.lines = [fileContents componentsSeparatedByString:@"\n"];

Un accesso alle proprietà è un messaggio di accesso implicita, per cui questa sia conserva la matrice (o copie, una volta di correggere il @property come ho suggerito sopra) e messaggi notifiche KVO.

Altri suggerimenti

Quando si dice di avere un arrangedObjects legato alla colonna vuoi dire si imposta l'origine dati tablview? Se non è di impostare l'origine dati Tableview alla matrice linee

Si potrebbe desiderare di lettura di questo , è ottenuto alcuni buoni schemi e spiegazioni. Che ennuikiller sta dicendo è corretto, credo che sia un problema con l'origine dati. Questo viene fatto chiamando

[aTable setDelegate:aDelegate];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top