여기에 약간의 손실이 있습니다. 누군가 내가 잘못 생각한 부분을 지적하기를 바랍니다.didReceiveMemoryWarning 후 iOS UITableView가 공백이되었습니다.
내 응용 프로그램은 iPads를위한 마스터 /보기 응용 프로그램입니다.
내 MasterView는 UITableView에서 상속 받았으며 didReceiveMemoryWarning이없는 한 정상적으로 작동합니다. 맞춤형 셀 내용물을 가지고 있으며, 모든 것이 다뤄집니다. 지금까지 그렇게 좋았고 빌드하는데 몇 시간 밖에 걸리지 않았습니다.
그러나 일단 didReceiveMemoryWarning을 얻으면 self.tableView가 이상하게 동작하는 것 같습니다. numberOfSectionsInTableView하고있는 tableView : numberOfRowsInSection : 방법은 다시 호출되지 않습니다, 그리고 내 코드는 다음과 같이 (메모리 경고 후) 첫 번째 항목을 선택하려고 할 때 :
[self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]
animated:NO
scrollPosition:UITableViewScrollPositionMiddle];
는
와 충돌 - [ UITableView scrollToRowAtIndexPath : atScrollPosition : animated :] : 구역 (0)의 경계 (0)를 벗어나는 행 (0). '
그래서 무엇을 제공합니까? 메모리 경고 중 내 tableView의 메모리가 완전히 지워지면 왜 nil로 설정되지 않았습니까? 또한 어떻게 다시 구축해야합니까?
안녕 마르쿠스, 쓰기를위한 감사합니다. 사과드립니다. OSX 10.6.8, Xcode 4.2, 프로젝트에서 ARC를 사용하고 있습니다. 대상은 iPad 2이고 iOS 5.0.0입니다. –
문제는 테이블의 내용이 블리자드 된 것으로 밝혀졌으며 배열의 내용과 함께 테이블에 무엇을 넣을 지 알 수있었습니다. 'docs'라는 배열은 'nil'되었으므로 [docs count]는 '0'이 아닌 'nil'을 반환 했으므로 selectRowAtIndexPath에 도달하면 'nil'행이 있기 때문에 ' '0'행이 아닙니다. –
'nil'개체가 충돌하지 않고 메시지를 받도록하는 것은 ObjectiveC의 근본적인 실수입니다. 왜냐하면 반환 개체의 형식을 int에서 nil로 변경하기 때문입니다. [docs count] 줄에서 충돌이 발생했다면 문제가있는 곳을 정확히 알고 있었을 것입니다. 다른 방법으로는 완전히 알려지지 않았을 것입니다. –