2012-12-13 4 views
0

내가 앱 위임에 지정 대리인을 추가하려고 해요, 그리고 난이 방법으로 그것을하고 있어요에 : 나는 다른 관점에서이 대리자를 사용하기 위해 노력하고있어 다음를 사용하여 사용자 정의 위임 AppDelegate에

AppDelegate.h 

@protocol AppDelegateDelegate <NSObject> 

- (void)finishSync:(BOOL)success; 

@end 

@interface AppDelegate : UIResponder <UIApplicationDelegate> { 

@property (nonatomic, weak) id <AppDelegateDelegate> delegate; 

@end 

UITabViewController 연결, 그리고 난이 방법으로 그것을 수행

FirstView.h 

#import "AppDelegate.h" 

@interface FirstView : UIViewController <AppDelegateDelegate> 

@end 

FirstView.m 

@implementation FirstView 

... 

- (void)viewDidLoad { 
    AppDelegate *appController = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    appController.customDelegate = self; 

} 

가 FirstView 완벽하게 작동하지만, 예를 들어 내가 대리자를 구현하는 동일한 코드를 SecondViewController에서 전환하는 경우, 대리인이 작동하지 않는 이상 어느 쪽도 없다 FirstView에서 ... 내가 뭘 잘못 했니?

편집 : 내가 rdelmar 답변을 시도,하지만 지금은, 내가하는 UITabBarController가이보기 didfinishloading 방법에로드를 4보기가 더 나은 내 상황을 설명 해요, 작동하지 않는

당신이 당신의 대답처럼 애플 대리자에서, 다음 응용 프로그램 첫 번째보기에서 열려, 그리고이보기 viewDidAppear의 로그는 다음과 같습니다 다음

<FirstView: 0xae10280> 

내가 두 번째보기로 전환이는 viewdidappear nslog의입니다 deleagate :

,210
<SecondView: 0x9f79b10> 

는 내가 thirdView의 전환이는 nslog입니다 :

<ThirdView: 0xba86200> 

마지막은 FourthView입니다 :

<FourtView: 0xba875b0> 

그럼, 모든 대리인이 모든보기에서 작동하는 것 같다 첫 번째보기로 전환하려고 시도했습니다. 로그는 다음과 같습니다.

(null) 

나는 세 번째보기를 전환합니다. 0

(null) 
두 번째 :

(null) 

네 번째 :

(null) 

가 어떤 작업을 더 이상, 그래서 내가 응용 프로그램을 중지하고 내가 다시 실행 한과 firstView 시작 :

<FirstView: 0xad28730> 

D보기 다음 firstView에

<SecondView: 0x9f682e0> 

창 :

(null) 

스위치 번째 뷰 :

(null) 

스위치 번째 뷰 : fourthView에

<ThirdView: 0xab297e0> 

스위치 :

세 번째보기로 다시
<FourthView: 0xab28430> 

16,:

(null) 

그래서 당신이 문제를 볼 수 그것은보기에 반환 대리자가 null의 경우 처음, 다음, 어떤 생각을 작동입니까?

편집 2 :

나는 내가있는 navigationController 사이에보기를 전환하는 경우 대리자가 결코 것 또한 통지가 (널), 대신 UITabBarController가에서보기를 전환 난 그래서 ... 널주고 난 내 코드처럼 그것은 내가 생각하는 UITabBarController 뷰의 문제입니다 ...

답변

1

개체는 한 번에 하나의 대리자 만 가질 수 있습니다. FirstView의 viewWillDisappear 메소드에서 델리게이트를 nil로 설정해보고 도움이되는지 확인하십시오.

이것은 나를 위해 일했습니다. 대리자의 설정을 첫 번째 컨트롤러의 viewWillAppear로 이동 했으므로 두 번째 컨트롤러로 돌아 가면 다시 설정됩니다. 내 컨트롤러는 내비게이션 컨트롤러에 있고, 나는 앞뒤로 움직이기 위해 푸시와 팝을 사용하고 있습니다. 두 컨트롤러 모두 동일한 코드를 사용합니다 (로그 제외).

+0

개체를 사용하면 한 번에 하나의 대리인 만 가질 수 있습니다. FirstView는 하나의 대리자 만 가질 수 있으며 AppDelegate는 한 번에 하나의 대리자 만 가질 수 있습니다. – Piero

+0

AppDelegate. AppDelegate는 FirstView (FirstView가 대리자 임)가 아니라 위임자가 있어야합니다. – rdelmar

+0

그래, 고마워,하지만 위임장 작성 = nil보기에서 사라질 것입니다. 헤더 파일에서 appController를 선언해야합니다. 아니면 이렇게 할 수 있습니다 : AppDelegate * appController = (AppDelegate *) [[UIApplication sharedApplication] delegate]; appController.customDelegate = nil; 보기에서 사라질 것인가? 최고는 뭐지? – Piero

관련 문제