gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:46:59 26 4
gpt4 key购买 nike

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

  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)。

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com