ObC:如何将内存指针转换为数据

时间:2010-09-25 22:46:24

标签: objective-c nsmutablearray ios4 nslog

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

我试图弄清楚如何在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已启动&lt;&lt;

  

2010-09-25 13:39:51.313 x1 [3675:207]&lt;#1&gt; row.playerName:Player1

2010-09-25 13:39:51.314 x1 [3675:207]&lt;#2&gt; row.curGameType:NORMAL1

2010-09-25 13:39:51.314 x1 [3675:207]&lt;#3&gt; playerArray:

[/ CODE]

2 个答案:

答案 0 :(得分:0)

如果您希望在通过NSLog输出时将对象输出为更合理的对象,那么您只需要为对象实现description方法。

例如:

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

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

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

答案 1 :(得分:0)

这里有一个问题:

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

rowRowOfPlayerData对象,而不是字符串。按照@ 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];
}

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