【问题标题】:Unrecognized selector sent to instance (typecast issue?)无法识别的选择器发送到实例(类型转换问题?)
【发布时间】:2012-03-27 03:04:20
【问题描述】:

我正在 Xcode 中为一个类项目创建一个 Connect Four 类型的游戏,但我遇到了一个辅助函数。我在“游戏板”的每一列上方都有一个按钮,可以将棋子放入游戏中。该板本质上是一个 7x6 的 UIImageView 网格(这是否是最实用的,我并不真正关心,它与我们在本课程中所学的一样多)。

我的辅助函数: (在.h中声明: NSString* imgString; UIImageView* prevImg; UIImageView* curImg; )

-(void) dropToken:(int) column
{
    [ self checkTurn ];
    for(int i=1; i<6; i++)
    {
        imgString = [ NSString stringWithFormat: @"img%d%d", i, column ];
        curImg = (UIImageView*) imgString;
        curImg.image = [ UIImage imageNamed: @"redpiece.png" ];
        if(i != 6)
        {
            prevImg = curImg;
            imgString = [ NSString stringWithFormat: @"img%d%d", i+1, column ];
            curImg = (UIImageView*) imgString;
            if(curImg.image == nil)
            {
                prevImg.image = nil;
                curImg.image = curToken;
            }
        }
    }
}

应该把column作为参数,然后到相应的UIImageView,把那里的图片设置为当前玩家token。

但是我得到了:

-[__NSCFString setImage:]: 无法识别的选择器发送到实例 0x6b09ee0

就行了:curImg.image = [ UIImage imageNamed:@"redpiece.png" ];

我的类型转换有问题吗?还是我忽略了一些容易解决的问题?

【问题讨论】:

  • 您希望curImg = (UIImageView*) imgString 做什么?我不明白你为什么认为这是合适的。 imgStringNSString。铸造它不会改变它的本质。它只是改变了编译器的认为。所以基本上,你在对编译器撒谎,它在你的脸上爆炸。
  • 你有UIImageViews 叫img11img12img21 等吗?

标签: xcode


【解决方案1】:

Kevin 在他的评论中有一个很好的观点,这条线永远不会起作用:

curImg = (UIImageView*) imgString;

我认为你想做更多这样的事情:

imgString = [ NSString stringWithFormat: @"img%d%d", i, column ];
        UIImageView* imgView = [UIImageView initWithImage:[ UIImage imageNamed: @"redpiece.png" ]];

这是我在此页面中编写的代码,因此它甚至可能无法编译,但想法是您需要使用您创建的字符串创建 UIImageView。

【讨论】:

  • 谢谢 - initWithImage 正是我想要的。我们几乎没有学过任何 C/C++(更不用说 iphone 编程使用的版本了)。 T
猜你喜欢
  • 2013-01-23
  • 2023-03-14
  • 2019-08-28
  • 2012-07-24
相关资源
最近更新 更多