2012-08-10 3 views
0

개체에서 비동기 메서드를 실행하고 요청이 끝나면 결과를 레이블에 인쇄합니다. 내 문제는 : 내 요청을 시작한 다음 내 개체를 제거 할 경우, 내 개체가 할당 취소 된 때문에 내 setText 메서드에서 충돌이 있습니다.요청 traitement crash - 할당 취소 된 인스턴스로 전송 된 메시지

개체를 놓아도 어떻게 이런 충돌을 피할 수 있습니까?

테스트가 있습니까?

답변

1

1) 개체를 제거하지 마십시오는 요청이 완료 될 때까지 :)

2) 요청 (개체에 따라 항상 가능)을 취소

+0

취소 할 수 없습니다. loadScoresWithCompletionHandler를 GameKit과 함께 사용하고 있습니다. – Pierre

+0

+1 질문에 완전히 대답하는 첫 번째 요점. 아직 끝나지 않았다면 왜 풀어 주겠습니까? – JeremyP

+0

그렇다면 (1)이 유일한 옵션이라고 생각합니다. @JeremyP가 말했듯이, 왜 당신이 끝내지 않은 것을 풀어 주겠습니까? – deanWombourne

0

해결책은있는 NSMutableArray 개체를 생성하는 것입니다 "init"또는 "viewDidLoad"메소드에서. 객체를 제거하려면 수퍼 뷰에서 객체를 제거한 후 항상이 배열에 배치하십시오. 그런 다음 비동기 메서드 (결과를 인쇄하기 위해 주 스레드에서 실행하는 것이 더 낫다)에서 마지막으로 수행해야 할 작업은 [storageArray removeObject : object]입니다.

0

개체가 할당 취소되어 현재보기의 하위보기 인 경우보기 자체가 삭제되었으므로 레이블 내용을 표시 할 수 없습니다. 왜 이렇게 될지는 앱의 디자인에 따라 다르지만 대개보기의 제거는 코드에 의해 감지 될 수 있으므로 변경 사항을 알면이 경우보기의 모든 참조를 nil로 설정해야합니다.

라벨을 아직보기에 추가하지 않았다면 라벨을 유지해야합니다. 라벨을 텍스트로 설정하고 포함 된보기에서 addSubview를 호출 할 수 있습니다.

또한 사용자 조치로 인해보기가 제거되는 경우 - 호출자 요청이 진행 중이므로 회 전자를 표시하고 사용자가이를 수행하지 못하도록 차단합니다.

0

비동기 요청은 오브젝트가 완료 될 때까지 오브젝트를 보유 할 수 있습니다.