使用委派不工作iOS解雇ViewController

时间:2014-01-08 06:42:53

标签: ios iphone objective-c delegates

我有两个通过控制器,一个主VC,然后一个segued VC。在我离开之前,我确保让主人成为受污染的VC的代表。建立了连接。

在隐藏的VC中,有一个触发解雇的按钮(有点像取消按钮)。在segued VC中,我有以下代码:

-(IBAction)deletePill:(id)sender    {
[delegate pillInfoViewControllerDidDeletePill:pill];

}

在主VC中,我所拥有的只是:

    -(void) pillInfoViewControllerDidDeletePill: (Pill*) pill{
[self dismissViewControllerAnimated:TRUE completion:nil];

}

我在这里缺少什么?

更新以回复评论并添加更多代码

回答问题并提供更多代码(我不想做代码转储)。我不是像模型视图那样呈现这个。用户按下主VC中的按钮以启动推送segue。以下是push segue的代码:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(UICollectionViewCell *)sender{
if([segue.identifier isEqualToString:@"pillInfo"]){
    pills=[[NSMutableArray alloc]initWithArray:[[self fetchedResultsController]fetchedObjects]];
    Pill* pillSelected =pills[sender.tag];
    PillInfoViewController *dest= [segue destinationViewController];
    [dest setPill:pillSelected];
    [dest setDelegate:self];
}

2 个答案:

答案 0 :(得分:1)

在解除显示的视图控制器时,无法调用呈现视图控制器的操作。为此,您可以按如下方式使用NSNotificationCenter:

-(IBAction)deletePill:(id)sender    {
                [[NSNotificationCenter defaultCenter] postNotificationName:@"NotificationName" object:nil];
}

现在在主视图控制器中,在ViewDidLoad中添加以下代码:

[[NSNotificationCenter defaultCenter] addObserver:self
 selector:@selector(pillInfoViewControllerDidDeletePill)
 name:@"NotificationName" object:nil];

答案 1 :(得分:0)

方法

-(void) pillInfoViewControllerDidDeletePill: (Pill*) pill

应该是协议的一部分,例如:

@protocol VCDismissingProtocol
@optional
-(void) pillInfoViewControllerDidDeletePill: (Pill*) pill;
@end

确保您已声明主视图控制器实现该协议:

@interface MasterViewController : UIViewController<VCDismissingProtocol>{
...
}
@end

并且segued视图控制器声明了一个委托属性,如:

@property (weak,nonatomic) id <VCDismissingProtocol> delegate;