2012-04-10 2 views
0

희망이 쉬운 하나입니다 전화를했다 NSObject의 통화 및 검출 ... 아이폰 OS : UIViewController에이

내가 여러 UIViewControllers에 사용되는 방법과 NSObject의가합니다 (NSObject의 나의 .PCH 파일에서 가져온) .

그런 다음 UIViewController는 NSObject를 호출합니다.

[ThisNSObject doSomething];

모든 그래서 거기에 아무런 문제가 없습니다 ... 그러나, 나는 해봐요이있는 UIViewController가 NSObject의에 호출을 한 감지 할 수있는 방법을 사랑하는 것이 계획하기 위해 노력하고있다. 그런 다음 해당 정보를 기반으로 어떤 방식 으로든 UIViewController를 조작 할 수 있습니다.

내가 필요한 이유는 각각의 Tab에 다른 UIViewController를로드하는 UITabBar가 있지만 전역 NSObject에 대한 호출을 모두 수행하기 때문에 그 하나의 특정 UIViewController에 추가 작업을 지시해야하기 때문입니다.

keyWindow에 액세스 할 수 있다는 것을 알고 있지만 이것이 정확히 내가 무엇인지 확신 할 수 없습니다.

의견을 보내 주시면 감사하겠습니다.

로이

편집 :이 사실, 아마 NSObject의 내가 현재 선택된 탭 검색 할 수 있습니다 후 스택의 상위 뷰를 얻을 수 ... 그리고 그런 기준을? 왜 이것이 나쁜 생각이 될지 생각하는 사람이 있습니까?

답변

0

런타임 코드를 사용하면 콜 스택을 통해 다시 드릴 할 수 있지만 간단한 문제는 다소 복잡한 해결책입니다.

-(void) doSomethingWithViewController:(UIViewController *) viewController; 

당신이 이런 식으로 자신에 대한 참조를 해봐요 방법 전달할 수있는이 방법 :

나는 당신이 영감의 API에 보면 이런 컨트롤러 인수를 위해 해봐요 방법을 수정하는 것이 제안
[theObject doSomethingWithViewController:self]; 

그리고 문제가 해결되었습니다.

P. 다른 매개 변수가있는 경우 대체 서명 스타일은

-(void) viewController:(UIViewController *) viewController doSomethingWithX:(id) x; 

일 수 있습니다. 모두 가장 적합한 방법에 따라 달라집니다.

- (void) viewController:(UIVIewController*)viewController doSomething; 

구문이 올바르지 않습니다 ... 코드 라인을

+0

네가 맞아, 나는 이것이 최선의 접근이라고 생각한다. – roycable

1

나는 일종의 @ drekka의 대답에 동의하지만 문제가있다. 그러나, 그는 일종의 올바른 다른 해결책 넣어 자신을 구속 :

- (void) doSomethingWithViewController:(UIViewController*) viewController; 

대안, 그것은 인수로의 ViewController를 통과하는 것은 정말 상황에서 의미가 있다는 것 같지 않기 때문에을에 위임을 사용하는 것입니다 사용자 정의 클래스를 만들고 viewController를 대리자로 등록하십시오.예를 들면 : 당신이 해봐요를 호출하기 전에

다음
@protocol MyCustomNSObjectDelegate; 

@interface MyCustomNSObject : NSObject 

@property (nonatomic, assign) id<MyCustomNSObjectDelegate delegate; 

- (void) doSomething; 

@end 

@protocol MyCustomNSObjectDelegate <NSObject> 
@required 
- (void) myCustomNSObject:(MyCustomNSObject*)myObject takeFurtherActionWithData:(NSString*)someData; 
@end 

당신의 UIViewController에서

#import "MyCustomNSObject.h" 

@interface MyUIViewController : UIViewController <MyCustomNSObjectDelegate> 

... 

은 그 다음의 UIViewController에 MyCustomNSObject의 위임 속성을 설정합니다. doSomething 메소드에서 "무언가"를 끝내고 나면 메소드 끝 부분에 다음을 추가합니다.

[self.delegate myCustomNSObject:self takeFurtherActionWithData:@"change this to whatever type you need here"]; 

희망이 있습니다.

+0

죄송합니다. 잘라내어 붙여 넣기보다는 코드를 입력하라고 가르쳐줍니다. :-) 내 대답을 수정합니다. – drekka