sqlite 데이터베이스의 데이터를로드하는 주 앱 대리인에 개체 배열을 만들었습니다. TableView를로드하면이 클래스의 속성이 객체 배열을 가리 키도록 설정됩니다. 그런 다음 TableView가 표시 될 때 행 수에 대한 배열 수를 올바르게 반환하고 배열의 해당 개체 속성에서 셀의 텍스트를 표시합니다.objective-c tableview가 다시로드시 충돌이 발생합니다.
내비게이션 막대의 오른쪽 상단 모서리에있는 새로 고침 단추로 네트워크에서 XML 파일을 다운로드하고 구문 분석 한 다음 데이터베이스를 업데이트합니다.
데이터베이스에서 개체의 주 배열을 다시 만들고 내 TableView 속성을 새 배열로 가리킨 다음 TableView에 데이터를 다시로드하도록 요청합니다. 여기가 EXC_BAD_ACCESS와 충돌합니다.
나는 디버거를 단계별 실행하여 reloadData
호출까지 모든 것이 올 바른 것을 확인했다. 데이터베이스와 주 배열은 모두 동기화되어 있으며 사용자 지정 TableView 속성은 주 배열을 가리키고 있습니다.
그런 다음 디버거를 단계별로 살펴보면서 몇 가지 사실을 알게되었습니다. 첫째, numberOfRowsInSection
을 호출하면 주 배열에 대한 포인터가 정확하고 행의 수가 올바른 것입니다. 둘째, 첫 번째 cellForRowAtIndexPath
호출에 도달하면 주 배열에 대한 포인터가 잘못된 메모리 섹션을 가리키고 있습니다. 실제 메모리 주소는 동일하지만 객체 배열이 사라졌습니다.
참조 횟수가 여전히 0보다 커야 가비지 수집이 없어야하므로이 방법과 같이 다시로드하는 동안 배열이 사라지는 방식을 이해할 수 없습니다. 그래서 제 질문은, 아무도 무슨 일이 일어날 지 아무 생각이 없나요? 둘째, 문제의 정확한 위치를 어떻게 결정합니까?
내가 배열이 릴리스되고 있다고 가정하고 있음을 지적해야합니다. 디버거는 배열의 값을 실제 객체 수 대신 {{int (int) [$ VAR count]} objects'로 표시합니다. – richard