Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 自定义委托为空iOS_Iphone_Ios_Delegates - Fatal编程技术网

Iphone 自定义委托为空iOS

Iphone 自定义委托为空iOS,iphone,ios,delegates,Iphone,Ios,Delegates,我知道这应该是一件简单的事情来解决,但我看不出哪里出了问题。也许多穿一双会有帮助。这就是我要做的 在“我的表格视图”控制器中,导航控制器上有一个(+)按钮用于添加新项目 我有一个模态序列,它将它带到下一个视图控制器。用户填写表单并点击保存表视图控制器重新加载新添加的记录 为此,我用一个委托实现了协议 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ if ([segue.identifier isEq

我知道这应该是一件简单的事情来解决,但我看不出哪里出了问题。也许多穿一双会有帮助。这就是我要做的

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

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

    protocol MyCustomDelegate <NSObject>
    
    @required
    
    - (void)addNewRecord:(myFormViewController *)formViewController itemToAdd:(Item *)item;
    
    @end
    
    @property (nonatomic,weak) id<MyCustomDelegate> delegate;
    
    在MyTableViewController.h中

    protocol MyCustomDelegate <NSObject>
    
    @required
    
    - (void)addNewRecord:(myFormViewController *)formViewController itemToAdd:(Item *)item;
    
    @end
    
    @property (nonatomic,weak) id<MyCustomDelegate> delegate;
    
    @接口MyTableViewController:UITableViewController

    MyTableViewController.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);
        }
    }
    
    -(void)addItem:(myFormViewController *)formViewController itemToAdd:(Item *)item{
    
        if(item)
        {
            MyClass *_itemClass = [[MyClass alloc]initWithPath:@"items/"];
    
            [_itemClass addItemForUser:item];
        }
    
        [formViewController dismissViewControllerAnimated:YES completion:nil];
    }
    
    在我的prepareforsgue方法中,我将tableviewcontroller设置为委托

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    
       if ([segue.identifier isEqualToString:@"addItemSegue"]){
    
        myFormViewController *_showaddTopic = [[myFormViewController alloc]init];
    
        _showaddTopic.delegate = self;
    }
    
    所有这些之后,myFormViewController中的委托被设置为“null”。我不知道为什么它不起作用。这是很基本的东西,但给了我很多时间

    多谢各位

    myFormViewController *_showaddTopic = [[myFormViewController alloc]init];
    _showaddTopic.delegate = self;
    
    这是你的问题。您正在创建一个新的MyFormViewController。但这是错误的MyFormViewController;您希望使用已经是segue目标控制器的控制器。因此,您设置了错误对象的委托

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    
       if ([segue.identifier isEqualToString:@"addItemSegue"]){
    
        myFormViewController *_showaddTopic = [[myFormViewController alloc]init];
    
        _showaddTopic.delegate = self;
    }
    
    (请注意,我使用大写字母作为类名称的开头?始终如此。)

    这是你的问题。您正在创建一个新的MyFormViewController。但这是错误的MyFormViewController;您希望使用已经是segue目标控制器的控制器。因此,您设置了错误对象的委托

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

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

    也许_showaddTopic.delegate=self;无法在此处写入并立即将此对象分配给您

    可能\u showaddTopic.delegate=self;无法在此处写入,请立即将此对象分配给您

    谢谢您的回复。它成功了,解决了问题,又给了我一个。我的[self.delegate respondsToSelector:@selector(addNewRecord:)]始终返回NO。你明白为什么吗?是的,我明白。另外问一个问题,给我链接。谢谢你的回复。它成功了,解决了问题,又给了我一个。我的[self.delegate respondsToSelector:@selector(addNewRecord:)]始终返回NO。你明白为什么吗?是的,我明白。问一个单独的问题,并给我它的链接。