2012-10-13 2 views
0

사용자의 친구가 최고 기록에 도전하고 사용자가 그것을 때리면 새로운 도전 (사과에 의해 프로그래밍되지 않음)으로 답장합니다. 다른 사용자가이 도전 과제를 받지만이 줄에서 Bad Access로 인해 즉시 충돌이 발생합니다 ([_delegate respondsToSelector : @selector (onScoresSubmitted :)]). http://www.raywenderlich.com/23189/whats-new-with-game-center-in-ios-6잘못된 액세스 문제

아이디어가 있으십니까?

+1

또한이 튜토리얼의 공식 포럼 스레드에 게시하는 것도 고려해 볼 수 있습니다. http://www.raywenderlich.com/forums//viewtopic.php?f=20&t=5167 – Luke

답변

0

귀하의 _delegate가 현재 임의의 쓰레기 값이 아닌 것은 확실합니까?

if ([_delegate respondsToSelector:@selector(onScoresSubmitted:)]) 

콜백을 사용하는 클라이언트 (위임자)가 콜백이 더 이상 수행되지 않도록 서버 위임을 정리해야합니다.

  1. A : :

    두 가지 방법으로 수행 할 수있는 대리자의 유지하려면 단절 측에서 확인 (하지만 더 이상 위임 관계가 아니다).
  2. B : 위임자 클라이언트 이 더 이상 서비스를 필요로하지 않을 때 위임자 포인터에 nil을 할당합니다. 때문에 나쁜 구현 다음은 일반적인 오류

: 문제는이 유사하지 않은 경우

ADelegateClient* client = [ADelegateClient new]; 
[SingletonService service].delegate = (id<SingletonServiceDelegate>)client; 
[client release]; 
// you must [SingletonService service].delegate = nil; Since 
// [SingletonService service] cannot know the delegate is not pointing to something valid anymore 
[[SingletonService service] makeStuffWillCauseCallBackToDelegate]; 

그때 내가 깊은 더 보면, 레이 코드를 읽을하지 않았다. 하지만 99 %는 할당 된 포인터 문제와 관련이 있다고 확신합니다.