所以我正在构建这个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
答案 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
个对象。