问题是让委托/协议正常工作

时间:2017-05-24 09:17:43

标签: ios objective-c delegates protocols

我正在尝试创建一种将数据从Controller A(CDCFaderController)传递到Controller B(CDCSendsViewController)的方法,这是因为虽然Controller A拥有一个视图,但我需要将一些视图数据发送到Controller B,因为它有我想要访问的一些其他功能。

我的逻辑是在Controller A中设置委托并在Controller B中接收它以供使用。

目前,我将此作为测试以使其正常运行:

控制器A .h

@protocol CDCSendsControllerDelegate <NSObject>
-(void)test:(NSString*)str;
@end

@interface CDCFaderController : UIViewController
<UIScrollViewDelegate, CDCControlDelegate, CDCFadersSideBarDelegate>

@property (nonatomic, weak) id <CDCSendsControllerDelegate> delegate; // delegate synthesis

控制器A .m

-(void)delegateTest {
    [self.delegate test:@"Hello world!"];
}

在接收控制器B中:

控制器B .h

@interface CDCSendsViewController : UIViewController
<CDCControlDelegate, CDCSendsControllerDelegate>

Controller B .m

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"VDL CALLED");
    CDCFaderController * faderController = [[CDCFaderController alloc] init];
    faderController.delegate = self;
}

-(void) test:(NSString*)str{
    NSLog(@"%@", str);
}

我想的是,当我加载控制器B时,它会从控制器A中拉出打印并显示信息吗?

实际上,控制器B不会被视图实例化,因为控制器A是视图的所有者。所以我想知道如何让B调用并正确地从A中提取数据以使其正常工作? B更像是一个后台控制器,它通过使用一些传递的数据向A添加支持功能。

希望这有助于我提供更多细节

1 个答案:

答案 0 :(得分:0)

我看到了上面的代码。实际上你的CDCFaderController是在viewDidLoad方法中本地初始化的。 ARC将在执行viewDidLoad之后释放该控制器对象,因为它不再用于任何会使委托nil的地方。

请制作CDCFaderController的属性并初始化它。之后它应该工作正常。