2009-10-22 11 views
2

J'ai une classe nommée Person et dans cette classe est la propriété PersonName (entre autres).Objectif C - Problème avec NSMutableArray et NSTableView

Un objet MutableArray MyUserInfoArr contient de nombreux objets Person.

Je souhaite répertorier chaque PersonName dans une cellule d'un TableView? Comment puis-je faire cela? Merci d'avance.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static NSString *CellIdentifier = @"Cell"; 
    Person *myPerson;  
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    NSString *cellValue = [myUserInfoArr objectAtIndex:indexPath.row]; 
    cell.text = cellValue; 

if (cell == nil) 
    { 
     cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 
     Person *myPerson = [myUserInfoArr objectAtIndex:indexPath.row]; 
     cell.textLabel.text = myPerson.DisplayName; 
     NSLog(@"abc %i",indexPath.section); 
} 

Ceci est mon code, il a couru, mais il suffit de retourner l'attribut Person.DisplayName de la dernière personne d'objet dans la myUserInfoArr. Comment le réparer?

Répondre

1
Person *person = [myUserInfoArr objectAtIndex:indexPath.row]; 
cell.textLabel.text = person.PersonName; 

La raison pour laquelle votre code ne fonctionne pas: le La propriété text doit être une NSString * et non une Person *.

+0

Mais [myUserInfoArr objectAtIndex: indexPath.row] dans la logique ne retourne pas un NSString car myUserInfoArr contient plusieurs objets de la classe Person. – ThyPhuong

2

La façon la plus simple serait de positionner le texte:

Person *person = [MyUserInfoArr objectAtIndex:[indexPath indexAtPosition:1]]; 
cell.textLabel.text = person.PersonName; 

indexPath contient deux indices, est d'abord l'indice de section, le 2ème est l'indice de l'élément dans la section. Donc, je suppose que dans votre cas, vous avez une seule section, c'est pourquoi il n'y a rien à faire avec l'indexAtPosition: 0.

Vous devez également mettre en place des méthodes de source de données de la table, ceux-ci disent votre point de vue de table combien de sections/lignes, il doit montrer:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [MyUserInfoArr count]; 
} 
+0

Merci pour votre réponse, il affiche le nombre de lignes dans mon TableView mais dans la ligne: cell.textLabel.text = [MyUserInfoArr objectAtIndex: [indexPath indexAtPosition: 1]]. NomPersonne Il y a une erreur: Demande plus de membre 'PersonName' dans quelque chose pas une structure ou une union. Qu'est-ce que cela signifie alors? – ThyPhuong

+0

@ThyPhuong: L'erreur signifiait probablement que la chose retournée n'était pas une personne *. Je pense que le problème était que la syntaxe chaînée n'était pas supportée. J'ai modifié ma réponse ci-dessus, essayez maintenant. – Prody