ObC: как преобразовать указатель памяти в dataP - PullRequest
1 голос
/ 26 сентября 2010

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

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

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

Я пытался сделать что-то вродеописания вывода, но не удалось.

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

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

[CODE]

@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 запущен << </p>

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

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]

Ответы [ 2 ]

0 голосов
/ 26 сентября 2010

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

[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 голосов
/ 26 сентября 2010

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

Например:

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

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

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