2012-06-17 4 views
0

현재 탭 막대가있는 iPhone 프로젝트가 있습니다. 탭바에는 두 가지보기가 있습니다. 두 가지보기 모두 코어 데이터 데이터베이스에 데이터를로드하거나 저장합니다 (두보기 모두 웹 서비스에서 데이터를 수집하고 데이터베이스에 저장하는 방법을 시작합니다). 뷰가로드되면 뷰에서 테이블을 채우는 데이터를 데이터베이스에서로드합니다. 앱을 실행하고 탭바에서 두 번째보기를 클릭하면 첫 번째보기는 여전히 웹 서비스의 데이터를로드하고 별도의 스레드에서 데이터베이스에 삽입합니다. 이것은 괜찮지 만, 첫 번째 뷰가 웹 서비스에서 데이터베이스로 모든 데이터를로드 한 후에 두 번째 뷰 컨트롤러가 데이터베이스의 데이터를로드하는 경우에만 두 뷰 컨트롤러를 고정시킵니다.핵심 데이터 : 저장 종료시 고정

콘솔에 오류가없고 xcode에서 오류가 없음을 표시하지 않습니다. 모든 프로세스가 다른 스레드에서 작동하므로 주 스레드가 멈추는 데 문제가 없습니다. 웹 서비스에서 데이터를 가져 와서 데이터베이스에 저장하는 것은 메소드이고 메소드의 끝에는 NSLog(@"View Controller 1 Save Complete")을 넣습니다. 이것이 호출되고 두 번째 뷰 컨트롤러가 데이터를로드하는 즉시 정지합니다. 앱 전체가 응답하지 않습니다 (아무 것도 작동하지 않습니다).

다른 SO 질문에 대한 정보를 살펴본 결과 모든 가져 오기 또는 삽입을 새로운 NSManagedObjectContext으로 선언하고이 작업을 완료했지만 문제가 해결되지 않았다고 권장했습니다.

어떤 일이 일어나고 있는지 또는 더 많은 정보를 알고 싶다면 알려 주시기 바랍니다.

편집 : Xcode 4.5 및 IOS 6 시뮬레이터를 사용하고 있습니다. 이것은 일주일 전에 출시 된 새로운 IOS의 베타 버전입니다. 베타 버전을 사용하기 전에이 문제가 있었으므로 오류가 아님을 압니다.

+2

웹 서비스에 연결하는 방법을 포함하여 관련 코드를 게시하십시오. – timthetoolman

+0

@timthetoolman 이것이 웹 서비스 오류가 아니며 콘솔에 오류가 없으므로 관련 코드가있을 것이라고 이미지 할 수 없습니까? – CoreCode

+0

은 스레딩 교착 상태에 빠져있는 것처럼 들릴 수 있습니다. @timthetoolman이 말했듯이, 우리는 어떤 일이 벌어지는지를보기 위해 약간의 코드를 볼 필요가 있습니다. – Sean

답변

3

내가 과거에 실행 한 가능성은 작성된 스레드와 다른 스레드에서 MOC와 상호 작용하려고 시도 할 가능성이 있습니다. 이런 종류의 일은 동시성을 수행하려고 할 때 발생할 수 있으며 MOC와 이야기 할 때 항상 어떤 스레드를 사용하고 있는지주의해야합니다. 예를 들어 비동기식 작업의 경우 콜백이 생각했던 것보다 다른 스레드에서 실행될 수 있습니다 (예 : viewDidLoad가 주 스레드에서 발생하므로 MOC를 만들면 나중에 다른 스레드에서 MOC를 사용할 수 없음).