2010-09-25 1 views
1

У меня есть пользовательский объект контейнера данных типа RowOfPlayerData. Когда я пытаюсь отобразить объект RowOfPlayerData в NSLog, система не знает, как его отображать, поэтому он просто показывает адрес объекта.ObC: Как преобразовать указатель памяти в dataP

Я пытаюсь выяснить, как я могу показать в инструкции NSLog то, что находится по этому адресу, чтобы я мог использовать данные.

Я пытаюсь построить это на учебник по NSPredicate: http://doronkatz.com/how-to-do-amazingly-simple-searches-with-nsar

Я попытался сделать своего рода описание продукции, но не преуспели.

Я попытался выяснить, как это сделать, чтобы я мог получить доступ к данным. Вот тестовый код, который я использовал, и некоторый вывод, который у меня есть. Кстати, я новичок в этом.

Я был бы очень признателен, если бы кто-то помог мне отобразить данные из playerArray в правильном формате, так как я просто этого не понимаю.

[КОД]

@interface RowOfPlayerData : NSObject { 

    NSString *playerName; 
    NSString *curGameType; 
} 

@property(nonatomic, retain) NSString *playerName; 

@property (nonatomic, retain) NSString *curGameType; 

-(void)addPlayerData2Array; 

@end 

здесь файл .m:

-(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); 

Выход:

addPlayerData2Array начал < <

2010-09-25 13: 39: 51,313 x1 [3675: 207] < # 1> row.playerName: Игрок1

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

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

[/ CODE]

ответ

0

У вас есть одна проблема:

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

row является RowOfPlayerData объект , а не строка. Следуя совету @ imaginaryboy, добавьте метод description к вашему классу RowOfPlayerData и убедитесь, что вы получаете класс правильно, когда вы вытаскиваете объекты из массива.

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

Все, что было сказано, я не думаю, что вы приближаетесь это правильный путем. Вы вызываете метод экземпляра -(void)addPlayerData2Array на объект, но затем вы создаете новый RowOfPlayerData и возвращаете его в виде массива. То, что вы должны делать это:

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

Если вы вызываете этот метод объекта, вы должны, вероятно, возвращая данные из этого объекта.

0

Если вы хотите ваш объект будет выводиться как нечто более разумное при выходе через NSLog, затем вам просто нужно реализовать метод description для вашего объекта.

Например:

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

Затем, когда вы хотите вывести его в журнале:

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