2013-02-19 5 views
3

iOS에서 Azure 모바일 서비스를 사용할 때 인증을 사용하고 있습니다. Microsoft에서 tabBarController를 사용하는 예제로 제공하는 기본 응용 프로그램을 확장했습니다. 하나의 컨트롤러는 MS가 사용하는 기본값이며 ToDoListController라고 불립니다.iOS의 한 컨트롤러에서 다른 컨트롤러로 속성 전달

두 번째 컨트롤러 인 AddItemController에서 ToDoListController에 사용되는 todoService 속성을 사용하고 싶습니다. 그래서 ToDoListController의 헤더 제가

@property (strong, nonatomic) TodoService *todoService; 

가 동일한 컨트롤러 m에서 난의 합성을 갖는다. 내가 tabBarController에서이 속성을 사용하려는 경우

, 난

(((TodoListController *)self.parentViewController).todoService) 

로 참조하지만 난

을 얻을 [UITabBarController가이 todoService] : 인식 할 수없는 선택기 인스턴스로 전송

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITabBarController todoService]: unrecognized selector sent to instance 
+0

문제는 그 자체입니다.parentViewController는 UITabBarController이며 ToDoListController가 아닙니다. – tkanzakic

답변

0

ToDoService의 .h 파일을 tabBarController로 가져 왔습니까? TabBarController에 대한 가시성을 허용합니다. 코멘트 기능을 사용하지 않는 것에 대한 사과는 허용되지 않습니다.

+0

예. 가져 왔습니다 ... – Dimitris

4

탭 막대 컨트롤러 중 하나에 액세스하려는 것 같습니다. 시도해보십시오

for (UIViewController *v in ((UITabBarController*)self.parentviewController).viewControllers) 
{ 
    UIViewController *vc = v; 

    if ([v isKindOfClass:[TodoListController class]) 
    { 
     ((TodoListController *)v).todoservice; 
    } 
} 
0

잘못된 컨트롤러에 선택기를 보내면 정확하게 계층 구조의 어느 것이 TodoListController인지 알아보십시오. 왜 parentViewController가 TodoListController라고 생각합니까?

UITabBarController 내부에 모달 현재 VC로 표시하는 경우 parentVC는 UITabBarController입니다.

도 시도해 볼 수 있습니다 self.parentViewController.parentViewController;

+0

parentViewController가 TodoListController인지 모릅니다. 책에서이 기술을 시도했습니다. 올바른 속성에 액세스하기 위해 계층 구조를 어떻게 볼 수 있습니까? self.parentViewController.parentViewController가 작동하지 않습니다 ... – Dimitris

+0

앱 화면 순서를 더 자세히 설명 할 수 있습니까? 어떻게 현재보기 컨트롤러 (어떤 코드가 샘플에 포함되어 있는지)에 들어 가려고합니다. – iiFreeman

0

나는 당신의 TodoService를 싱글 톤으로 제안 할 것입니다. 이것을 수행하는 방법은 여러 가지가 있습니다. 여기에 간단한 코드가있어 어디서나 액세스 할 수있는 싱글 톤을 만듭니다 *. 당신의 TodoService.h 파일

+ (TodoService *) defaultService; 

을 그리고이 구현에이 방법 서명을 추가

TodoService *todoService; 

+ (TodoService *)defaultService 
{ 
    if (todoService == nil) { 
     todoService = [[TodoService alloc] init]; 
    } 
    return todoService; 
} 
이제

어디서나 응용 프로그램에서, 당신은

TodoService* service = [TodoService defaultService]; 
[service doSomething]; 

* 참고 통해 단일 인스턴스에 액세스 할 수 있습니다 Objective C에는 싱글 톤을 구현하는 더 좋은 방법이 있지만 대부분의 경우 기본 스레드에서 defaultService 만 호출하는 좋은 방법입니다.

0

마지막으로 문제는 중단 점이었습니다. 지금 당장 좋은 데이터가 전달됩니다.

(((TodoListController *)self.parentViewController).todoService) 
관련 문제