OGeek|极客世界-中国程序员成长平台

标题: iphone - 自定义委托(delegate)为空 iOS [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 02:24
标题: iphone - 自定义委托(delegate)为空 iOS

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

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

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

MyFormViewController.h

protocol MyCustomDelegate <NSObject>

@required

- (void)addNewRecordmyFormViewController *)formViewController itemToAddItem *)item;

@end

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

MyFormViewController.m

@synthesize delegate;

- (IBAction)addItemid)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 respondsToSelectorselector(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)addItemmyFormViewController *)formViewController itemToAddItem *)item{

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

        [_itemClass addItemForUser:item];
    }

    [formViewController dismissViewControllerAnimated:YES completion:nil];
}

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

-(void)prepareForSegueUIStoryboardSegue *)segue senderid)sender{

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

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

    _showaddTopic.delegate = self;
}

毕竟,我在 myFormViewController 中的委托(delegate)被设置为“null”。我不确定为什么它不起作用。这是非常基本的东西,但让我很难过。

谢谢



Best Answer-推荐答案


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

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

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

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






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4