서버를 처음 실행할 때 초기화 할 일부 통신을 수행하는 iPhone 응용 프로그램에서 작업하고 있습니다. 각 기본 작업 (사용자 인증, 활성화 키 가져 오기, 업데이트 다운로드 등)을 수행 할 수있는 메소드가있는 ServerCommunication 클래스가 있으며 각 작업에 대해 ServerCommunication의 새 인스턴스가 생성됩니다. 나는 그것들을 재사용하지 않고 있지만 더 효율적 일 것이다."할당 된 인스턴스 0xec75b0에 메시지가 전송되었지만 0xec75b0이 보이지 않아야합니다"
사용자가 첫 번째 초기화 화면을 완료하면 ServerCommunication이 네 번 생성됩니다. 나는 NSLog(@"Initializing ServerCommunication instance %p", self);
으로 -init
방법으로 그것을 추적합니다. 두 번째 초기화 화면은 사용자가 "다음"버튼을 누를 때 ServerCommunication을 몇 번 호출하지만 마지막 인스턴스화시 콘솔에 -[ServerCommunication insertDataIntoLocalDB:]: message sent to deallocated instance 0xec75b0
메시지와 함께 응용 프로그램이 중단됩니다. 문제는 0xec75b0이 의 주소이고 첫 번째 화면에서 ServerCommunication 인스턴스의 첫 번째 인스턴스입니다.
왜 그 인스턴스로 메시지를 보내겠습니까? 나는 그 (것)들을 어디에서든지 유지하고 있지 않다; 대부분 autoreleased입니다. 도움이된다면 NSURLConnection을 사용하여 XML 데이터의 비동기 다운로드를 수행 한 다음 NSXMLParser로 파싱합니다. 그런 다음 파서의 대리자 메서드 -(void)parserDidEndDocument:(NSXMLParser *)parser
은 내보기 컨트롤러의 메서드에서받은 NSNotifications를 보냄으로써 다음 화면으로 진행할지 아니면 거기에 머물러 있는지 여부를 알 수 있도록 오류 메시지를 표시합니다.
도움을 많이 받으실 수 있습니다!
맞습니다! 내 ServerCommunication 인스턴스를 'removeObserver'해야했습니다. 대부분의 알림은 다른 곳에서 수신되지만 ServerCommunication은 사용자가 두 번째 화면에서 "다음"을 탭하면 게시됩니다. 그리고 이전의 모든 인스턴스가 (심지어 아무 것도하지 않았을지라도) 그것을 받기 위해 등록 되었기 때문에 두 번째 화면의 마지막에 알림이 최종적으로 전송되었을 때 NSNotificationCenter가 모든 정보를 NSNotificationCenter로 보내려고했습니다. 이전 인스턴스 (더 이상 존재하지 않음). 감사합니다. –
이것은 내 충돌 문제를 해결했습니다! – lnguyen55