无法确定无法识别的选择器错误的原因

时间:2015-08-14 04:44:22

标签: ios objective-c iphone uiview unrecognized-selector

所以我正在构建这个iOS应用程序。每次使用时都会在一个小方块上轻敲,这个方块应该会改变颜色。我已经确定我的所有方法都已定义。我已经更改了xIndex值的名称,以便我可以确保它不是查看崩溃源的视图的.xIndex值。但无论我做什么,我似乎仍然得到:

'-[UIView xIndex]: unrecognized selector sent to instance 0x7fe06be6ce70'

请注意,上面的实例引用了specificSquare的内存地址。任何猜测?几个小时以来一直在争夺这个。

- (void)handleFunViewSquareTap:(UITapGestureRecognizer*)sender
{
    if (sender.state == UIGestureRecognizerStateEnded)
    {
        // handling code
        CGPoint locationOfTap = [sender locationInView: self.view];
        NSInteger xVIndex = floorf(locationOfTap.x / 40.f);
        NSInteger yIndex = floorf(locationOfTap.y / 40.f);

        // find the view that matches these indexes
        for(FunViewSquare *specificSquare in [self.view subviews])
        {
            if((specificSquare.xIndex == xVIndex) && (specificSquare.yIndex == yIndex))
           {
//                //specificSquare.backgroundColor = [ViewController randomColor];
           }
        }
    }
}

- (void)viewDidLoad {
    [super viewDidLoad];

        CGRect frameRect = self.view.frame;
        NSInteger xIndex, yIndex = 0;
        for( CGFloat yPosition = 0.0; yPosition < frameRect.size.height; yPosition+=40.0f )
        {
            // reset xIndex on every iteration
            xIndex = 0;
            for( CGFloat xPosition = 0.0; xPosition < frameRect.size.width; xPosition+=40.0f )
            {
                FunViewSquare *randomSquare = [[FunViewSquare alloc] initWithFrame: CGRectMake(xPosition, yPosition, 40.f, 40.0f)];

                if(randomSquare)
                {
                    randomSquare.backgroundColor = [ViewController randomColor];
                    randomSquare.xIndex = xIndex;
                    randomSquare.yIndex = yIndex;
                    [self.view addSubview: randomSquare];
                }
                xIndex++;
            }
            yIndex++;
        }

        butGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleFunViewSquareTap:)];
        if(butGestureRecognizer)
        {
            [self.view addGestureRecognizer: butGestureRecognizer];
        }

}


+ (UIColor *)randomColor
{
    UIColor *colorToReturn;

    uint32_t randomNumber = random();
    randomNumber = (randomNumber % 10); // a random number between 0 & 10

    switch(randomNumber)
    {
        case 0 :
            colorToReturn = [UIColor blueColor];
            break;
        case 1 :
            colorToReturn = [UIColor grayColor];
            break;
        case 2 :
            colorToReturn = [UIColor greenColor];
            break;
        case 3 :
            colorToReturn = [UIColor purpleColor];
            break;
        case 4 :
            colorToReturn = [UIColor redColor];
            break;
        case 5 :
            colorToReturn = [UIColor brownColor];
            break;
        case 6 :
            colorToReturn = [UIColor cyanColor];
            break;
        case 7 :
            colorToReturn = [UIColor orangeColor];
            break;
        case 8 :
            colorToReturn = [UIColor magentaColor];
            break;
        case 9 :
            colorToReturn = [UIColor whiteColor];
            break;
        default :
            colorToReturn = [UIColor blackColor];

    }
    return(colorToReturn);
}

@end

1 个答案:

答案 0 :(得分:2)

问题是,您正在浏览self.view中的所有子视图,并非所有这些视图都是FunViewSquare次观看,并且都没有回复xIndex 。因此崩溃。

您似乎认为for循环只会挑选FunViewSquare中的subviews个对象 - 事实并非如此。

你需要在这里做一些内省 - 像这样重写你的代码:

for(FunViewSquare *specificSquare in [self.view subviews]) {
 if ([specificSquare isKindOfClass:[FunViewSquare class]](
  if ((specificSquare.xIndex == xVIndex) && (specificSquare.yIndex == yIndex)){
           //specificSquare.backgroundColor = [ViewController randomColor];
  }
 }
}

这样您就可以检查以确保specificSquare确实是FunViewSquare个对象。