1

我有一个 RowOfPlayerData 类型的自定义数据容器对象。当我尝试在 NSLog 中显示一个 RowOfPlayerData 对象时,系统不知道如何显示它,所以它只显示对象的地址。

我试图弄清楚如何在 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: 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:

[/代码]

4

2 回答 2

0

如果您希望您的对象在通过 NSLog 输出时输出为更明智的内容,那么您只需description为您的对象实现该方法。

例如:

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

然后当你想在日志中输出它时:

NSLog(@"Row - %@", myRowOfPlayerData);
于 2010-09-25T22:52:28.647 回答
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];
}

如果您在一个对象上调用此方法,您可能应该从该对象返回数据。

于 2010-09-25T23:00:38.453 回答