2

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

  1. 在我的表格视图控制器中,导航控制器上有一个 (+) 按钮来添加新项目。
  2. 我有一个模态segue,将它带到下一个视图控制器。用户填写表格并点击保存表格视图控制器重新加载新添加的记录。

为此,我使用委托实现了协议。

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”。我不确定为什么它不起作用。这是非常基本的东西,但让我很难过。

谢谢

4

2 回答 2

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

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

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

于 2013-04-22T01:44:44.183 回答
0

也许 _showaddTopic.delegate = self; 不能在这里写,然后立即分配这个对象

于 2013-09-24T03:26:41.287 回答