2009-12-18 2 views
0

[self.parentViewController.tableView reloadData]에서 DetailViewController의 save : 메소드로 시도했지만 가장 좋아하는 오류가 발생했습니다. 구조체 또는 공용체가 아닌 'tableView'멤버가 요청되었습니다.parentViewController의 데이터를 다시로드하려고 시도했지만

내 RootViewController 헤더가 포함되어 있으며 parentViewController를 RootViewController로 캐스팅하지 않아도됩니다.

내가 뭘 잘못 했습니까?

답변

0

시도 :

[((MyParentViewControllerClassName *)self.parentViewController).tableView beginUpdates]; 
[((MyParentViewControllerClassName *)self.parentViewController).tableView reloadData]; 
[((MyParentViewControllerClassName *)self.parentViewController).tableView endUpdates]; 

당신의 부모 VC의 클래스 이름으로 MyParentViewControllerClassName 교체.

[[[viewControllerArray objectAtIndex:parentViewControllerIndex] tableView] beginUpdates]; 
[[[viewControllerArray objectAtIndex:parentViewControllerIndex] tableView] reloadData]; 
[[[viewControllerArray objectAtIndex:parentViewControllerIndex] tableView] endUpdates]; 
0

이 시도 :이 예 다음,

NSArray *viewControllerArray = [self.navigationController viewControllers]; 
NSInteger parentViewControllerIndex = [viewControllerArray count] - 2; 
[[viewControllerArray objectAtIndex:parentViewControllerIndex] setBackBarButtonItemTitle:@"New Title"]; 

당신은 또한 시도 할 수 :

부모 뷰 컨트롤러를 참조하려면, 난 항상이 같은 예를 수행해야했다

MyParentControllerClass  *parent = (MyParentControllerClass *) self.parentViewController; 
[parent.tableView reloadData]; 
2

현명한 디자인으로, 한 컨트롤러가 다른 컨트롤러의보기로 메시지를 직접 보내도록하는 것은 좋지 않습니다. ontroller. 대신, 다른 개체를 호출 할 수있는 메서드를 tableview 컨트롤러에 있어야합니다. 이것은 당신이 어떤 컨트롤러/객체가 UI를 바꾸고 있는지 알 수없는 코드가 스파게티로 변하는 것을 막을 것입니다.

self.parentViewController.tableView이 작동하지 않는 이유는 tableView 속성이없는 일반 UIViewController으로 정의되어 있기 때문입니다. 위에서 언급 한 것처럼 적절한 클래스에 캐스팅하면 메시지가 제거됩니다.

메서드 호출과 같은 속성을 처리하기 때문에 오류가 발생하지 않는 [self.parentViewController tableview] 호출을 사용할 수도 있습니다.

관련 문제