2010-03-12 2 views
2

응용 프로그램 시작시 데이터를로드하는 한 뷰에 UITableView가 있고 나중에 사용자가 텍스트를 상자에 입력하고 버튼을 누르면 데이터베이스를 다시 쿼리합니다. 테이블에 대한 데이터를 저장하는 원래 NSMutableArray를 다시 채 웁니다.cellForRowAtIndexPath가 tableView에서 호출되지 않습니다. reloadData

모든 것이 완벽하게 작동합니다. 일부 로깅 문에서는 배열에 올바른 정보가 있다고 말할 수 있으며 numberOfRowsInSection 메서드는 적절한 개수를 반환하며 다시로드가 호출 된 후에 호출됩니다.

그러나 cellForRowAtIndexPath는 다시로드 된 후 다시 호출되지 않으며 테이블 데이터는 절대로 업데이트되지 않습니다.

인터넷 검색에 많은 시간을 할애했지만 도움이되는 정보가 없습니다. 누구든지 도와 줄 수 있습니까? 대략 라인 http://github.com/botskonet/inmyspot/blob/master/Classes/PlateFormViewController.m

101

: 대략 라인 94

에서 http://github.com/botskonet/inmyspot/blob/master/Classes/InMySpotViewController.m

: http://github.com/botskonet/inmyspot

특정 다시로드가에서 호출되는 :에

모든 코드는

A 비트 추가 정보 : 새로운 데이터가 mutablearray에 추가되면 테이블 스크롤을 시작하면 결국 다음과 같이 종료됩니다.

"캐치되지 않은 예외로 인해 앱 종료 중 'NSRangeException', 이유 : '*** - [NSCFArray objectAtIndex :] : 인덱스 (29) 넘어 경계 (29) ' "

이는 테이블 셀이 배열에서 스크롤 위치와 일치하는 데이터를 찾을 수 없다고 생각합니다. 배열에는 새로운 데이터가 있지만 테이블에는 없습니다.

+0

NSMutableArray에서 ".count"속성은 어디에서 얻습니까? 내가 뭔가를 놓치지 않는 한,'plates.count'가 아니라'[plates count] '여야합니다. –

+0

모름지 모르겠지만 데모에서 빌린 샘플 코드입니다. 그것은 잘 작동하지만. 로그 아웃했는데 정확합니다. – helion3

답변

1

UITableView에 대한 대리인을 제대로 설정하지 않았기 때문에 리로드가 호출되지 않습니다.

@interface InMySpotViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource>{ 
} 

또한 여기 mainDelegate.plates을 덮어 :

NSMutableArray *platesArray = [[NSMutableArray alloc] init]; 
       mainDelegate.plates = platesArray; 
       [platesArray release]; 

왜 두 개의 컨트롤러를 결합하지. 당신의 행동이 당신의 대부분의 문제로 이어지고 있습니다. PlateFormViewController에 불필요하게 새로운 InMySpotViewController를 생성합니다. 테이블을 다시로드 이후

NSMutableArray *platesArray = [[NSMutableArray alloc] init]; 
    mainDelegate.plates = platesArray; 
    [platesArray release]; 

:

+0

컨트롤러에 대한 대리자를 업데이트했습니다. 지금까지 아무런 효과가 없었습니다. 그러나 플레이트 배열을 업데이트하는 코드는 실제로 새로운 데이터베이스 결과 집합에로드됩니다. 감사! – helion3

+0

나는 두 개의 컨트롤러를 결합했으며, 다른 텍스트/버튼 요소를 모두 덮는 테이블을 다시 얻고 있습니다. http://github.com/botskonet/inmyspot/tree/views – helion3

+0

UIViewController의 프레임 크기를 적절하게 설정하고 있습니까? – Jordan

1

plateLookup에서 기존 배열을 소지품. 배열에는 요소가 없으므로 cellForRowAtIndexPath:은 호출되지 않습니다.

편집 : 또한 그래서 당신도 화면에 표시의 테이블을 다시로드하지 않는 새로운 뷰 컨트롤러

 InMySpotViewController *viewController = [[InMySpotViewController alloc] init]; 
     [viewController refreshTable]; 

을 만들 수 있습니다.가족에 의한 디버깅에

+0

플레이트 배열 "clobber"는 새로운 데이터베이스 결과 집합에로드 될 예정이므로 이것이 내가 원하는 방식이라고 생각합니다 일하다. 플레이트 배열이 새 데이터 세트를 제대로 수신하고 있습니다. 그러나, 나는 왜 화면에 tableView가 업데이트되지 않는지 이해하는 새로운 뷰를 만들고 있다고 가정합니다. 어떻게 해결할 수 있습니까? 이전에 테이블이 다른 요소를 덮어 놓았던 문제가 있었기 때문에 이러한 뷰가 별도로 표시되었으므로 아무도 아이디어가 없었습니다. – helion3

+0

plateLookup의 끝 부분에 중단 점을 설정 한 다음 platesArray의 내용을 검사합니다. 생각한 것처럼 배열이 다시로드되지 않는 것을 볼 수 있습니다. 그렇기 때문에 Index of Bounds 예외가 발생합니다. – Darren

1

덕분에 나는 결정 다음과 같은 문제가 원인이었다했습니다

UITableViewController 같은 inMySpotViewController이었다 설치되지 않은 UIViewController 테이블이 다른 모든 것을 은폐 된 이유입니다. 나는 UIViewController로 변경 한 다음 새 UITableView을 추가 :

IBOutlet UITableView *myTblView; 
@property (nonatomic, retain) UITableView *myTblView; 

을 그리고 내 코드에 걸쳐 해당 테이블보기를 참조. 이 코드는 단일 뷰 분기에서 수행되었으므로 이제 제대로 작동합니다.

platesArray는 문제로 언급되었지만 배열이 성공적으로 업데이트 되었기 때문에 범위를 벗어 났기 때문에가 아니라 테이블보기가 아니기 때문에 (배열의 인덱스로 스크롤하려고했기 때문에) 그건 존재하지 않았지만, 테이블이 시각적으로 업데이트되지 않았기 때문에 그것이 문제라는 것을 알았습니다.)

수정 된 플레이트 배열의 내용을 다시 작성한 후 성공적으로 로그 아웃 한 결과 모든 값이 정확하고 plates.count가 적절한 값을 반환하므로 어쨌든 "clobbered"되지 않았습니다.

도움을 주신 모든 분들께 감사드립니다.

3

동일한 문제가 발생했습니다. 내 문제는 비슷했다 : 내 하위 클래스 UITableViewController (MyTableViewController)에 대한 참조를 포함하여 몇 가지를 포함하는 (MyViewController) 하위 뷰 UIViewController 하위 있습니다. MyViewController.xib에서 MyViewController에 의해로드 된 tableView가 MyTableViewController에로드 된 테이블 뷰와 동일한 지 확인하기 위해 Interface Builder에서 tableview의 참조를 MyViewController에 연결하고 MyTableViewController's view 속성을 가리 키도록했습니다. enter image description here

0

내가 같은 문제가 있고, 내가 인터페이스에있는 tableView의 특성을 갖는으로 추적 : 인터페이스 빌더의 행동을 설명하기 너무 힘들어하기 때문에 여기에

는 사진입니다. 내가 직접 추가 한 것 같지는 않지만 UITableViewController 자신의 tableView 속성을 마스킹했다. 내가 그것을 제거, 프로젝트를 계속 빌드,하지만 지금은 내가 처음으로 UITableViewController 다시 pushcontent viewcontroller에서 돌아올 때, 적절한 순서가 발생합니다.

0

나는 동일한 문제가있었습니다. Google의 답변 대부분은 delegate입니다. 그러나 나는 내 delegatedata source이 올바르게 설정되었다고 확신했다.

후기, 나는 문제가 리턴이 방법의 값 것으로 나타났습니다 : 내 코드에서

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

,이 같은 방법을 다시 썼다 :

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    // Return the number of rows in the section. 
    return _dataArray.count; 
} 

을하지만 브레이크 포인트를 점검 할 때 , 나는 어떻게 든 _dataArray가 없다는 것을 알았다. 이 메서드는 양의 정수를 반환해야합니다. 그렇지 않으면

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

이 호출되지 않을 수 있습니다.

도움이되기를 바랍니다.

관련 문제