iphone - iOS 自定义委托(delegate)为 null

标签 iphone ios delegates

我知道这应该很容易解决,但我看不出出了什么问题。可能额外的一对会有帮助。这就是我正在尝试做的事情。

  1. 在我的 TableView Controller 中,导航 Controller 上有一个 (+) 按钮,用于添加新项目。
  2. 我有一个模态转场,可以将其带到下一个 View Controller 。用户填写表单并点击保存, TableView Controller 将重新加载新添加的记录。

为此,我使用委托(delegate)实现了协议(protocol)。

MyFormViewController.h

protocol MyCustomDelegate <NSObject>

@required

- (void)addNewRecord:(myFormViewController *)formViewController itemToAdd:(Item *)item;

@end

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

MyFormViewController.m

@synthesize delegate;

- (IBAction)addItem:(id)sender {
    Item *item = [[Item alloc]init];

    item.name = itemName.text;
    item.desc = itemDescription.text;

    // I am having problem here, self.delegate is being null even though, it's being set in    prepareForSegue.
    if ([self.delegate respondsToSelector:@selector(addNewRecord:)]) {

        [self.delegate addNewRecord:self itemToAdd:item];
    }
    else{

        // delegate is getting set to null for some reason.
        NSLog(@"Delegate method not getting called...%@",delegate);
    }
}

MyTableViewController.h

@interface MyTableViewController : UITableViewController

MyTableViewController.m

-(void)addItem:(myFormViewController *)formViewController itemToAdd:(Item *)item{

    if(item)
    {
        MyClass *_itemClass = [[MyClass alloc]initWithPath:@"items/"];

        [_itemClass addItemForUser:item];
    }

    [formViewController dismissViewControllerAnimated:YES completion:nil];
}

在我的 prepareForSegue 方法中,我将 tableviewcontroller 设置为委托(delegate)。

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

   if ([segue.identifier isEqualToString:@"addItemSegue"]){

    myFormViewController *_showaddTopic = [[myFormViewController alloc]init];

    _showaddTopic.delegate = self;
}

完成这一切之后,我在 myFormViewController 中的委托(delegate)被设置为“null”。我不知道为什么它不起作用。这是非常基本的东西,但给我带来了困难。

谢谢

最佳答案

myFormViewController *_showaddTopic = [[myFormViewController alloc]init];
_showaddTopic.delegate = self;

这就是你的问题。您正在创建一个 MyFormViewController。但这是错误的 MyFormViewController;您想要使用已经 segue 的目标 Controller 。所以您设置了错误的对象委托(delegate)。

(PS 注意我使用大写字母来开头类名吗?总是这样做。)

关于iphone - iOS 自定义委托(delegate)为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16138215/

相关文章:

ios - 停止 MKMapView 的惯性滚动

ios - 你如何从 UIImagePickerController 获取图像文件名?

c# - How fix AddressOf requires a relaxed conversation to the delegate 错误

ios - 从 Bundle - Swift 在 Facebook 上分享视频

c++ - 来自绑定(bind)方法的原始函数指针

objective-c - 在 Cocoa 中子类化时重写委托(delegate)方法

iphone - ViewDidLoad 在 initWithNibName 之前被调用?

iphone - NSDictionary 中的键和值是有序的吗?

iphone - NumberPad 限制数字输入

iphone - 我可以将 ObjectiveC @selector 放入 NSDictionary 中吗?