自定义委托为空iOS

时间:2013-04-22 01:42:05

标签: iphone ios delegates

我知道这应该是一个简单的修复方法,但我看不出有什么问题。可能是额外的一对会有所帮助。这是我想要做的。

  1. 在我的表格视图控制器中,导航控制器上有一个(+)按钮,用于添加新项目。
  2. 我有一个模态segue,它将它带到下一个视图控制器。用户填写表单并点击保存表视图控制器重新加载新添加的记录。
  3. 为此,我使用委托实现了协议。

    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设置为委托。

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    
       if ([segue.identifier isEqualToString:@"addItemSegue"]){
    
        myFormViewController *_showaddTopic = [[myFormViewController alloc]init];
    
        _showaddTopic.delegate = self;
    }
    

    毕竟,我在myFormViewController中的委托被设置为“null”。我不确定为什么它不起作用。这是非常基本的东西,但给了我很多时间。

    谢谢

2 个答案:

答案 0 :(得分:4)

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

有你的问题。您正在创建 MyFormViewController。但那是错误的MyFormViewController;你想使用已经 segue的目标控制器的那个。所以你要设置错误的对象的委托。

(PS注意我使用大写字母来开始一个类的名字?总是这样做。)

答案 1 :(得分:0)

也许_showaddTopic.delegate = self;不能写在这里并立即shuold这个对象