這個問題真的有我難倒...崩潰而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