这个问题真的有我难倒...崩溃而CALayer的-hitTest:
我有使用UIPanGestureRecognizer和我用我的handlePanGesture内的下列方法调用一个iPad项目:
- (AIEnemyUnit *) hitTestForEnemyUnit:(CGPoint)where {
CALayer * layer = [self hitTest:where];
while (layer) {
if ([layer isKindOfClass:[AIEnemyUnit class]]) {
return (AIEnemyUnit *)layer;
} else {
layer = layer.superlayer;
}
}
return nil;
}
一旦我“找到”一个AIEnemyUnit层,我继续拖动,一切正常。除了关于围绕6日至10日“拖”我与调试器崩溃中只有CALayer的-hitTest深:
modifying layer that is being finalized - 0x124530
*** -[NSCFSet hitTest:]: unrecognized selector sent to instance 0x124530
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason:
'*** -[NSCFSet hitTest:]: unrecognized selector sent to instance 0x124530'
很好的答案。有一件事:'hitTest:'和'superlayer'返回的图层不是自动发布的,但它们也不会被保留。这可能会导致崩溃:'CALayer * sublayer = [[layer sublayers] objectAtIndex:0]; [sublayer removeFromSuperlayer]; [sublayer superlayer];' – rpetrich 2010-09-28 08:51:20
谢谢,我不太确定,但知道他们不属于主叫方。修复。 – bobDevil 2010-09-28 15:03:32
谢谢你的修复!我已经从'@synthesize dragItem'切换过来了;'到一个手动设置器并忘记设置'dragItem = [newDragItem retain];'。我在其他帖子中看到“修改正在定稿的图层”消息与保留计数问题有关,但是我的错误消息完全不同,所以我不确定这是否是答案。但由于其他职位,我仔细检查了我的代码,看看我调用了多少次-release和-removeFromSuperlayer。我非常专注于发布方面,我没有考虑保留,所以谢谢 – 2010-09-28 16:28:26