2012-04-17 1 views
1

하나의 앱에 두 개의 컨트롤러가 있습니다. 다른 설정을 시도하고 있습니다.UITableViewController 대 UITableView

하나는 UITableViewController로, 위임자와 데이터 소스는 수퍼 클래스에서 가져온 것으로 이해합니다.

이제 이론에 따르면 UIViewController에 UITableView가 있고 헤더 파일에 Datasource 및 Delegate가 선언되어 있습니다.

지금까지 너무 좋은 :-)

이제이 비트가 내가하지 않는 것입니다 : 내가 데이터를 연결 할 수있는 tableView 포인터를 사용할 수있는 실행 파일에서

,하지만 난 코어 데이터 등을 사용하고 있습니다 나는 다른 사람의 사이에이 코드 조각이 : 내가 설정을하지 않으면

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller 
    { 
    [self.tableView beginUpdates]; 
    } 

이를 5 다른 상황이있는 UIViewController에 오류가 줄을

IBOutlet UITableView *tableView; 

는 물론 그것은

:-) 합성하지만이있는 tableView를 선언하는 경우 나는 이것을 말한다 라인에 최대 두 배에 대한 경고를 얻을 :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath 
{ 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; 
[self configureCell:cell atIndexPath:indexPath]; 
return cell; 
} 

그것도있는 tableView를 선언하기 때문이다.

그래서 나는이 개 질문이 :

1) 왜 나는 UITableViewDatasource 및 위임을 설정 한 경우 함께 IBOutlet을 설정해야합니까?

2) UITableViewCell에 tableView2와 같은 다른 포인터 이름을 지정하면 왜 데이터를 편집 할 때 변경 사항을 볼 수 없지만 응용 프로그램을 다시 시작한 후에 만 ​​결과를 볼 수 있습니까?

UITableViewController 인 MasterViewController에는이 옵션이 없습니다.

건배 제프

--- 이미지 추가 ----

enter image description here


enter image description here

내가있는 viewDidLoad

이 코드를 편집 모드에 들어가려면
self.navigationItem.leftBarButtonItem = self.editButtonItem; 

내가 수행해야 할 작업이 코드를 사용

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 

{ (editingStyle == UITableViewCellEditingStyleDelete 있으면)을 { NSManagedObjectContext * 컨텍스트 = self.fetchedResultsController managedObjectContext]; [context deleteObject : [self.fetchedResultsController objectAtIndexPath : indexPath]];

NSError *error = nil; 
    if (![context save:&error]) { 
     // Replace this implementation with code to handle the error appropriately. 
     // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    } 
} 
} 

이제 + 옵션이 작동하지만 앱을 다시 시작한 후에 만 ​​결과가 표시됩니다. 스 와이프하고 삭제할 수 있지만 다시 앱의 동일한 인스턴스에서 실시간으로 움직이지는 않습니다.

답변

1

당신은 tableView라는 속성을 선언했으며 아마 같은 이름으로 합성했을 것입니다.

UITableViewController도있는 tableView라는 속성을 가지고 있지만 기본있는 tableview 데이터 소스 및 위임 방법은 일반적으로 tableView라는 인수를 전달 정확하게 때문에 백업 바르가, 뭔가 다른, 아마도 _tableView를 호출 할 것이다, 방법의 범위에서, 인스턴스 변수와 충돌합니다.

그 방법 내에서 tableView은 무엇을 의미합니까? 전달 된 인수 또는 귀하의 ivar? 특정 질문에 대한 대답에서

가 :보기 컨트롤러 (업데이트를 시작하도록 지시 할 때 같은) 테이블보기로 이야기해야 할 때

  1. 당신은 그 인스턴스에 대한 콘센트가 필요합니다. 데이터 소스와 델리게이트 연결은 뷰 뷰 컨트롤러와 대화 할 때 (예 : 셀을 요청할 때)에 필요합니다.

  2. 여기에 무엇을 묻고 있는지 잘 모르겠지만 원하는대로 표보기로 콘센트를 호출 할 수 있지만 메시지를 보내는 모든 내용을 self.tableView으로 변경해야합니다. consitency 위해 나는과 같이 속성을 합성하는 것 :

    @synthesize tableView = _tableview; 
    

    이는 처음에 기존 tableView라는 아이바를 방지 할 수 있습니다. 난 당신이 바르를 선언하지 않은 가정하고, 단지 함께 IBOutlet?

    @property (nonatomic) IBOutlet UITableView *tableView; 
    
+0

안녕, 회신 일에 감사와 속성을 선언 한) 나는 바르를 선언 한 다음에 속성을 설정 한 그것과 일치합니다. 2) 나는 헤더 파일에서 TableView Delegates 및 Datasource를 설정하면 왜 tableView 인수가 없는지 질문을 단순화하는 것으로 추측합니다. 3) 합성하려면 _tableView 방법을 시도했지만 tableFor2 "cellForRowAtIndexPath :"변경할 때 같은 효과가 있습니다. 4) UITableViewController를 추가 및 편집하면 결과가 애니메이션으로 표시됩니다. 삭제 기호가 표시됩니다,보기 컨트롤러에서 UITableView의 이름을 바꿀 때 발생하지 않습니다. –

+0

죄송합니다. 긴 설명이었습니다. 내 설명으로 질문을 명확히하려고 노력했습니다. ;-) –

+0

질문에 더 많은 코드를 포함해야 할 수도 있습니다. 1) 그렇게하지 마라, 내가 제안하는 것처럼 ivar 선언을 제거하라. 2) 당신이 의미하는 바를 모르겠다. 관련 코드를 보여주십시오. 3) 현재 가지고있는 코드를 포함해야합니다. 4) 3)을보세요. 뷰 컨트롤러를 테이블 뷰에 연결하는 방법과 테이블 뷰의 데이터 소스를 연결하고 뷰 컨트롤러에 위임하는 방법은 무엇입니까? – jrturton

관련 문제