在方法中返回位置字符串存储

时间:2013-09-01 11:44:58

标签: objective-c xcode

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

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

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

如您所见,description是一个存储结果的字符串变量。主要是,我把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

1 个答案:

答案 0 :(得分: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方法的讨论,并注意description 3}}方法仅用于打印调试信息。文档中没有任何内容表示{{1}}无法被任意覆盖。