我正在尝试在 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>
然后我切换到第二个视图,这是代表的 viewdidappear nslog:
<SecondView: 0x9f79b10>
然后我切换到thirdView,这是nslog:
<ThirdView: 0xba86200>
最后是FourthView:
<FourtView: 0xba875b0>
所以似乎所有代表都在所有视图中工作,然后我尝试切换到第一个视图,这是日志:
(null)
我切换第三个视图:
(null)
第二:
(null)
第四个:
(null)
没有工作了,所以我停止了应用程序并再次运行它,并从 firstView 开始:
<FirstView: 0xad28730>
切换到第二个视图:
<SecondView: 0x9f682e0>
在 firstView 中返回:
(null)
切换到第二个视图:
(null)
切换到第三个视图:
<ThirdView: 0xab297e0>
切换到第四视图:
<FourthView: 0xab28430>
然后再来看第三个视图:
(null)
所以你可以看到问题是第一次工作,然后当返回视图时委托为空,知道吗?
编辑2:
我还注意到,如果我在 NavigationController 之间切换视图,则委托永远不会(null),而是像我一样在 UITabBarController 中切换视图,我的代码给出 null ......所以我认为这是 UITabBarController 视图的问题......