Да, так что это через меня или какое-то время, пока я не выясню, что происходит. Сегодня, когда Apple выпустила финальную версию Xcode, а вчера вышла iOS 4, я наконец начал изучать возможность переноса своих приложений на iOS 4.
Итак, я скачал новый SDK и приступил к работе. Немного поработав над моим приложением, представьте мое удивление, когда я получил ошибку доступа (попытка поговорить с освобожденным объектом). Я ненавижу эти ошибки, так сложно понять, что делать. Итак, я потратил последние 45 минут, пытаясь найти объект, который я освободил. Я не мог вспомнить, что я изменил, и сообщения об ошибках не помогали. Я включил NSZombies (Зомби !!!) и получил эту ошибку:
2010-06-22 15:38:28.655 ProjectPidgey[17783:207] *** -[CCTargetedTouchHandler claimedTouches]: message sent to deallocated instance 0xd834b30
Что примерно так же полезно, как кажется. Я нахожусь в Cocos2D, поэтому я думаю, что что-то трогается, что больше не существует? Но я не смог найти ничего подобного в своем коде. Итак, по своей прихоти, я использовал мою старую версию Xcode. Скомпилировал и установил его на симуляторе под управлением iOS 3.0. Работал нормально. Как очарование, так же, как я сделал это.
Итак, мой вопрос: что здесь происходит? В чем разница между SDK 4 и 3, которая может вызвать ошибку Bad Exc? Есть идеи? Или, возможно, это проблема с cocos2d, которую нужно обновить?
Редактировать: Я немного повозился и обнаружил, что, удалив эту строку кода:
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
CGPoint touchPoint = [touch locationInView:[touch view]];
touchPoint = [[CCDirector sharedDirector] convertToGL:touchPoint];
if ( ![super containsTouchLocation:touch] ) return NO;
[self.engine playerHitRedDot:self];
//[self.parent removeChild:self cleanup:YES]; //REMOVED THIS LINE
return YES;
}
Тогда это работает. Таким образом, похоже, что обработчик CCTargedTouch связан с моим спрайтом (который затем удаляется, когда я к нему прикасаюсь), и у кого-то все не получается ... Однако мне нужно удалить спрайты (или, по крайней мере, исчезнуть, но я хочу быть памятью добросовестной), так как я могу это сделать?
Спасибо!