2010-10-02 6 views
0

chaque fois que j'appelle la méthode -(void)setArrayCheckOut:(int)num dans une autre classe le tableau arrayCheckout est vide. L'appel -(IBAction)reloadTable:(id)sender après -(void)setArrayCheckOut:(int)num "résultats dans recharger la table - (null), 0".tableau est vide après avoir appelé la méthode

Toute idée de ce qui va mal?

si longtemps

@implementation CheckOut 
-(id)init 
{ 
[super init]; 
tableCheckOut = [[NSTableView alloc]init]; 
if (!arrayCheckOut) 
{ 
arrayCheckOut = [[NSMutableArray alloc]init]; 
[arrayCheckOut addObject:@"-"]; 
} 

return self; 
    } 
-(void)setArrayCheckOut:(int)num 
{ 

    switch (num) { 
case 170: 
[arrayCheckOut addObject:@"T20, T20, DB"]; 
break; 
default: 
[arrayCheckOut addObject:@"-"]; 
break; 
    } 
NSLog(@"array = %@",[arrayCheckOut objectAtIndex:0]); 

[tableCheckOut reloadData]; 

} 


-(IBAction)reloadTable:(id)sender 
{ 
NSLog(@"reload table - %@, %d",[arrayCheckOut objectAtIndex:0],[arrayCheckOut count]); 

[tableCheckOut reloadData]; 
} 


- (int)numberOfRowsInTableView:(NSTableView *)tv 
{ 
return [arrayCheckOut count]; 
} 

- (id)tableView:(NSTableView *)tv 
objectValueForTableColumn:(NSTableColumn *)tColumn 
row:(int)row 
{ 
NSString *v = [arrayCheckOut objectAtIndex:row]; 
return v; 
} 
@end 
+0

où est défini arrayCheckOut? Afficher le code –

+0

Nulle part parce que je n'en ai pas besoin. Le tableau ne sera lu par l'application et supprimé complètement avant de le remplir à nouveau. – lueda

+0

Problèmes avec 'setArrayCheckOut:' comprennent un nombre magique (170), les chaînes littérales magiques et non-localisée, l'utilisation de 'int' où' NSInteger' ou 'NSUInteger' pourrait être plus approprié (également un problème dans vos méthodes de source de données) et le nom non descriptif de la méthode. Je suggère de définir des constantes pour le nombre et les chaînes, les chaînes en utilisant localisant 'NSLocalizedString' (car ils semblent être destinés à être exposés à l'utilisateur), le passage à' 'NSInteger' ou NSUInteger', et renommer' setArrayCheckOut: 'quelque chose que indique plus clairement le but de la méthode, plutôt que sa mise en œuvre. –

Répondre

1

Si le tableau était vide, objectAtIndex:0 jetterait une exception.

Comme ce n'est pas le cas, mais renvoie nil, vous ne disposez pas d'un tableau: Vous avez envoyé le message objectAtIndex: à nil.

Très probablement, CheckOut n'est pas le type de classe dont les instances sont initialisées par init. Consultez la documentation de sa superclasse pour voir son initialisateur désigné, puis remplacez-la.

+0

Je suis novice en programmation ... Quel type d'initialiseur dois-je utiliser? La superclasse est NSObject, donc je m'attendais à un seul initialiseur (init). – lueda

+0

Vous devez implémenter tout initialiseur qui sera appelé. Le seul initialiseur fourni par NSObject est 'init', c'est donc probablement celui que vous devez implémenter dans votre sous-classe; puisque vous l'avez implémenté pour créer le tableau, cela nous ramène à la question de savoir pourquoi vous n'avez pas de tableau. Avez-vous omis de votre question un code qui remet la variable 'arrayCheckOut' à' nil'? –

+0

Grepped le contenu de mon projet. arrayCheckOut est uniquement défini dans CheckOut.h/m. Voici donc mon projet complet incluant tous les fichiers source: http://stubbi.org/Darx.zip. Vous pouvez voir, 'arrayCheckOut' est correctement défini, mais la table n'est pas actualisée avec la nouvelle valeur. 'arrayCheckOut' a de nouveau sa valeur par défaut. Peut-être que vous trouvez l'erreur – lueda

Questions connexes