2012-03-07 2 views
10

내 앱의 테이블에 UITableViewController을 사용하고 있습니다. 테이블에 표시 할 데이터를 제공하기 위해 NSFetchedResultsController을 추가했습니다 (대리자로 self 설정).NSFetchedResultsController가 관리하는 UITableView에 여분의 행을 추가하십시오.

그러나 테이블의 마지막 셀에 고유 한 셀을 추가하고 싶습니다. NSFetchedResultsController의 술어에 의해 생성 된 항목과 관련이 없으므로이 셀이 항상 테이블의 맨 아래에 있도록하고 싶습니다.

- (NSUInteger)numberOfSectionsInTableView:(UITableView *)sender 
{ 
    return [[self.fetchedResultsController sections] count] + 1; 
} 
- (NSUInteger)tableView:(UITableView *)sender numberOfRowsInSection:(NSUInteger)section 
{ 
    return [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects] + 1; 
} 

그리고이 여분의 행 (테이블 만 1 개 섹션이)과 같이 생성되는 경우를 잡기 : 나는 시도했다

단순히 테이블 뷰 데이터 소스에서 이러한 방법에 1을 추가 :

- (UITableViewCell *)tableView:(UITableView *)sender 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.row == [self.fetchedResultsController.fetchedObjects count]) { 
     //Generate the last cell in table. 
    } else { 
     //Generate the rest of the cells like normal. 
    } 
    return nil; //To keep the compiler happy. 
} 

이렇게하면 색인이 마지막 셀인지 확인하고 적절하게 처리합니다.

그러나 나는 아직도 실행시 다음과 같은 오류가 점점 오전 :이 원인을 무엇

*** Terminating app due to uncaught exception 'NSRangeException', 
reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]' 

어떤 생각을? 아니면 NSFetchedResultsController에 의해 제어되는 테이블 뷰에 여분의 행을 추가하는 더 좋은 방법이 있습니까?

답변

13

문서 (업데이트 등)에 표시된대로 모든 데이터 소스 메서드를 구현하면 가져온 결과 컨트롤러가 테이블 뷰에 매우 밀접하게 연결됩니다. 꽤 지저분하고 해킹 당할 것입니다.

"추가 행"을 대신 테이블의 바닥 글보기로 사용할 수 있습니까? 이것은 항상 바닥에있을 것입니다. 셀 모양처럼 보이게하는 것은 그리 큰 일이 아니지만, 모양에서 다른 셀과 다르게 보이기를 원합니다.

+0

아, 실제로 구현하는 것이 훨씬 더 좋을 것입니다. 감사합니다. (분명히 나는 ​​여전히 iOS 프로그래밍에 대해 매우 새로운 편이다 .-)) –

+0

예, 매우 해킹 당했다. 이 아이디어는 위대한만큼 간단합니다 ...고마워요! – Shingoo

+0

하지만이 모양은 - http://stackoverflow.com/questions/10965098/nsfetchedresultscontroller-prepend-a-row-or-section –

2

테이블이 하나 개의 섹션이 코드는 잘못된 보인다 감안할 때 :

- (NSUInteger)numberOfSectionsInTableView:(UITableView *)sender 
{ 
    return [[self.fetchedResultsController sections] count] + 1; 
} 

내가있는 tableview이 두 번째 섹션을 검색하려고 할 때 충돌이 발생 의심; + 1을 제거해야합니다.

가져온 결과 컨트롤러 (NSFetchedResultsController prepend a row or section 참조)에서 제공된 테이블을 사용하면 더 복잡한 작업을 수행 할 수 있으므로이 간단한 사례를 사용하여 작업 할 수 있습니다.

+0

여전히 tableView : cellForRowAtIndexPath :는 [[self.fetchedResultsController sections] count] 회라고합니다. –

0

UITableView의 기본 머리글 및 바닥 글보기를 사용하지 않는 이유는 무엇입니까?

예 :

UIView *customBottomView = [UIView alloc] init... //set up your View (what you called custom bottom cell)

self.table.tableFooterView = customBottomView; // 다른 방법으로 tableHeaderView

기술적으로 테이블에 추가되고 TableView에서 훌륭하게 처리 한 테이블 아래 또는 위에 표시된 뷰를 추가하는 중입니다. 사용자의 경우 이것이 (마지막) 셀인지 또는 단순히보기인지를 판별 할 수 없습니다. didSelectRowAtIndexPath와 같은 메소드를 사용할 계획이라면 해결해야 할 것입니다.

관련 문제