我正在尝试创建一种将数据从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添加支持功能。
希望这有助于我提供更多细节
答案 0 :(得分:0)
我看到了上面的代码。实际上你的CDCFaderController是在viewDidLoad方法中本地初始化的。 ARC将在执行viewDidLoad之后释放该控制器对象,因为它不再用于任何会使委托nil的地方。
请制作CDCFaderController的属性并初始化它。之后它应该工作正常。