代表返回nil

时间:2013-11-05 15:54:50

标签: ios objective-c delegates storyboard modalviewcontroller

我有两个视图的故事板,一个是主要的第二个是模态。因此,当我在第一个视图中点击按钮时,我调用我的模态视图(没有代码,全部在故事板中),我需要使用委托关闭我的模态视图。所以在我的第一个视图中我写了

First.h

#import "Modal.h"

@interface SkyViewController: UIViewController <ModalDelegate>

First.m

in viewDidLoad
ModalView *modal = [[Modal alloc] init];
modal.delegate = self;

-(void)exit
{
   [self dismissModalViewControllerAnimated:YES];
}

模态视图

Modal.h

@protocol ModalDelegate;

@interface ModalView : UIViewController

....

@property (assign) id<ModalDelegate> delegate;

.....

@protocol ModalDelegate

-(void)exit;

@end

中的

Modal.m

....
@syntesize delegate;

...

-(void)buttonPressed
{
   [delegate exit];
}
我在做错了什么?我在谷歌看到它可能是故事板中所有者的一些问题...我不知道:(

2 个答案:

答案 0 :(得分:3)

你应该让代表弱,而不是'assign'。

答案 1 :(得分:3)

问题是

  ModalView *modal = [[Modal alloc] init]. 

这将创建模态视图的新实例,而不是按下按钮时在屏幕上显示的实例。您应该实现prepareForSegue,并在那里设置您的委托。 ModalView将是segue.destinationViewController。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    ModalView *modal = segue.destinationViewController;
    modal.delegate = self;
}

此代码位于您的第一个控制器中。