App Delegateにカスタムデリゲートを追加しようとしていますが、次のようにしています。
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に4つのビューがあり、このビューはアプリデリゲートのdidfinishloadingメソッドに読み込まれ、アプリは最初のビューで開きます、これは、回答の場合と同じように、ログインビューのViewDidAppearです。
<FirstView: 0xae10280>
次に、2番目のビューに切り替えます。これは、デリゲートのviewdidappearnslogです。
<SecondView: 0x9f79b10>
次に、thirdViewに切り替えます。これは、nslogです。
<ThirdView: 0xba86200>
最後はFourthViewです。
<FourtView: 0xba875b0>
すべてのデリゲートがすべてのビューで機能しているようです。最初のビューに切り替えようとしました。これがログです。
(null)
3番目のビューを切り替えます。
(null)
二番目:
(null)
第4:
(null)
もう動作しないので、アプリケーションを停止して再度実行し、firstViewから開始します。
<FirstView: 0xad28730>
2番目のビューに切り替えます。
<SecondView: 0x9f682e0>
firstViewに戻ります。
(null)
2番目のビューに切り替えます。
(null)
3番目のビューに切り替えます。
<ThirdView: 0xab297e0>
fourViewに切り替えます。
<FourthView: 0xab28430>
次に、再び3番目のビューに移動します。
(null)
問題がわかるように、最初は機能し、ビューに戻ったときにデリゲートがnullになるということですが、何か考えはありますか?
編集2:
また、NavigationController間でビューを切り替えると、デリゲートが(null)になることはなく、代わりに、コードがnullを与えるようにUITabBarControllerでビューを切り替えることに気付きました...したがって、UITabBarControllerビューの問題だと思います...