iOS - 委托不工作

时间:2014-10-23 09:13:02

标签: ios objective-c

我有两个视图控制器,AbcViewControllerXyzViewController。两个控制器的行为类似。每个按钮都有一个“添加”按钮,分别打开AddNewAbcViewControllerAddNewXyzViewController

AddNewAbcViewController上,当按下“提交”按钮时,它会填充必要的内容并关闭,然后将其恢复为AbcViewController。我在这里使用委托AbcViewController关闭AddNewAbcViewController。这很有效。

现在我想对XyzViewControllerAddNewXyzViewController执行相同的操作,但它不起作用。在AddNewXyzViewController中调用btnSubmit时,它没有进入XyzViewController dimiss方法。我已多次扫描我的代码,但没有找到任何额外的未添加。我甚至在XyzViewControllerAddNewXyzViewController中给出了一个不同的解雇方法名称,但这也没有用。我错过了什么?

以下是我AbcViewControllerAddAbcViewController的摘要。 Xyz的代码是相同的:

班级AddNewAbcViewController.h

#import <Foundation/Foundation.h>

// protocol
@protocol AddNewAbcProtocol <NSObject>

-(void)dismiss;

@end

@interface AddNewAbcViewController : UIViewController<UITextViewDelegate>

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

@end

班级AddNewAbcViewController.m

@interface AddNewAbcViewController() <UINavigationControllerDelegate, UIImagePickerControllerDelegate>
...
@end

@implementation AddNewAbcViewController

...

- (IBAction)btnSubmit:(id)sender
{
  [self.delegate dismiss];
}
@end

班级AbcViewController.h

#import <Foundation/Foundation.h>
#import "AddNewAbcViewController.h"

@interface AbcViewController : UIViewController<AddNewAbcProtocol, UISplitViewControllerDelegate>
...
@end

班级AbcViewController.m

@implementation AbcViewController

-(void)dismiss
{
    NSLog(@"delegated to dismiss()");
    [self dismissViewControllerAnimated:YES completion:nil];
}

@end

2 个答案:

答案 0 :(得分:5)

正如大家所解释的那样,基本上你忘记了一行代码,比如“.delegate = self”。

这是一个方便的初学者介绍代表。

https://stackoverflow.com/a/4213005/294884

答案 1 :(得分:0)

使用if语句查看委托是否有效:

if ([self.delegate respondsToSelector:@selector(dismiss)])
{
    [self.delegate dismiss];
}

将AddNewXyzViewController创建为实例变量,但不是局部变量。