-1

我正在使用 xcode 使用命令行构建一个垄断棋盘游戏。我能够在板上创建棋盘和图块,但在尝试返回玩家在棋盘上的位置时遇到问题。以下是我的代码:

-(NSString *) description
{
    NSString *_playerresult;
    _playerresult = _name;
    return _playerresult.description;
}

-(NSString *) currentLocation
{
    return _isOn.description;
}

如您所见,description 是一个存储结果的字符串变量。在 main 中,我放了 p1.currentlocation 以便程序可以返回玩家的位置,但它没有。它提示 Tile: 0x10010ac90

更新 这是全班课程,

 #import "Player.h"

 @implementation Player

 -(id)initWithName:(NSString *) name
 {
     if (self = [super init])
 {
         name = _name;
}
     return self;
 }

 -(void) move:(Dice *) die
 {
     [die rollDice];
     [_isOn leave:self];
     [_isOn move:self using:die remainingSteps:die.totalValue];

 }

 -(void) placeOn:(Tile *) t
 {
     self->_isOn = t;
     [t land:self];

 }

 -(NSString *) description
 {
     NSString *_playerresult;
     _playerresult = _name;
     return _playerresult.description;
 }

 -(NSString *) currentLocation
 {
     return _isOn.description;
 }

 @end
4

1 回答 1

0

description方法在协议中声明NSObject并由符合该协议的任何类实现。

描述如下:

此方法用于创建对象的文本表示,例如格式化字符串

但它的默认实现是返回有问题的对象的类名和内存地址,这就是为什么您Tile: 0x10010ac90在控制台中看到的原因。

你需要description在你的Tile类中重写并返回一个你想要格式化的字符串,例如:

-(NSString *)description
{
    return [NSString stringWithFormat:@"Tile Location: %d x %d", row, column];
}

边注

您可以通过删除不必要的变量来简化类description中的实现:Player

-(NSString *) description
{
    NSString *_playerresult;
    _playerresult = _name;
    return _playerresult.description;
}

变成:

-(NSString *) description
{
    return _name.description;
}

附加信息

在人们开始投票/评论说description仅用于调试目的之前,我建议他们重新阅读该description方法的讨论,并注意该debugDescription方法的唯一目的是打印调试信息。文档中没有任何内容可以说description不能出于任意目的覆盖。

于 2013-09-01T13:38:51.743 回答