2010-09-25 14 views
1

J'ai un objet de conteneur de données personnalisé de type RowOfPlayerData. Lorsque j'essaie d'afficher un objet RowOfPlayerData dans NSLog, le système ne sait pas comment l'afficher, donc il montre juste l'adresse de l'objet.ObC: Comment convertir un pointeur de mémoire en donnéesP

J'essaie de comprendre comment je peux afficher, dans une instruction NSLog, ce qui est à cette adresse afin que je puisse utiliser les données.

Je suis en train de construire ce sur un tutoriel sur NSPredicate: http://doronkatz.com/how-to-do-amazingly-simple-searches-with-nsar

J'ai essayé de faire une sorte de description de la sortie mais pas succeded.

J'ai essayé de comprendre comment faire ceci pour pouvoir accéder aux données. Voici le code de test que j'ai utilisé et certaines sorties que j'ai actuellement. BTW, je suis nouveau à cela.

J'apprécierais vraiment que quelqu'un puisse m'aider à afficher les données de playerArray dans le bon format car je ne comprends pas.

[CODE]

@interface RowOfPlayerData : NSObject { 

    NSString *playerName; 
    NSString *curGameType; 
} 

@property(nonatomic, retain) NSString *playerName; 

@property (nonatomic, retain) NSString *curGameType; 

-(void)addPlayerData2Array; 

@end 

est le fichier .m ici:

-(void)addPlayerData2Array { 


    NSLog(@">>addPlayerData2Array started<<"); 
    NSMutableArray *playerArray = [[NSMutableArray alloc] init]; 
    RowOfPlayerData *row; 
    row = [[RowOfPlayerData alloc] init]; 
    row.playerName = @"Player1"; 
    row.curGameType = @"NORMAL1"; 
    NSLog(@"<#1> row.playerName: %@", row.playerName); 
    NSLog(@"<#2> row.curGameType: %@", row.curGameType); 
    [playerArray addObject:row]; 
    NSString *xx; 
    xx = [playerArray objectAtIndex:0]; 

    NSLog(@"<#3> playerArray: %@", xx); 

Sortie:

addPlayerData2Array a commencé < <

2010-09-25 13: 39: 51,313 x1 [3675: 207] < # 1> row.playerName: Joueur1

2010-09-25 13: 39: 51,314 x1 [3675: 207] < # 2> row.curGameType: normale1

2010-09-25 13: 39: 51,314 x1 [3675: 207] < # 3> playerArray:

[/ CODE]

Répondre

0

Vous avez un problème ici:

[playerArray addObject:row]; 
NSString *xx; 
xx = [playerArray objectAtIndex:0]; 
NSLog(@"<#3> playerArray: %@", xx); 

row est un objet RowOfPlayerData , pas une chaîne. En suivant le conseil de @ imaginaryboy, ajoutez une méthode description à votre classe RowOfPlayerData et assurez-vous que vous obtenez la classe appropriée lorsque vous sortez des objets de la matrice.

RowOfPlayerData *xx = [playerArray objectAtIndex:0]; 
NSLog(@"<#3> playerArray: %@", xx); 

Tout cela étant dit, je ne pense pas que vous vous approchez de ce la bonne façon. Vous appelez une méthode d'instance -(void)addPlayerData2Array sur un objet, mais vous créez ensuite un nouveau RowOfPlayerData et le renvoyer sous la forme d'un tableau. Ce que vous devez faire est la suivante:

-(void)addPlayerData2Array { 
    return [NSArray arrayWithObjects:self.playerName, self.curGameType, nil]; 
} 

Si vous appelez cette méthode sur un objet, vous devriez probablement retourner les données de cet objet.

0

Si vous voulez votre objet à sortir comme quelque chose de plus sensé lors de la sortie via NSLog, puis Vous devez simplement implémenter la méthode description pour votre objet.

Par exemple:

- (NSString*)description { 
    return [NSString stringWithFormat:@"Player: %@, GameType: %@", self.playerName, self.curGameType]; 
} 

Puis, quand vous voulez afficher dans un journal:

NSLog(@"Row - %@", myRowOfPlayerData);