gpt4 book ai didi

ios - 自定义委托(delegate)返回 nil 值

转载 作者:可可西里 更新时间:2023-11-01 05:41:14 27 4
gpt4 key购买 nike

我正在创建一个这样的协议(protocol)。

   @protocol parsingComplete <NSObject>
@optional
-(void) updateUI:(NSMutableDictionary*)foodList;
@end

@interface foodParser:NSObject<NSXMLParserDelegate>

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

解析完成后,我希望触发此委托(delegate)。所以我正在做这样的事情。

- (void)parserDidEndDocument:(NSXMLParser *)parser
{
if (delegate)
{
[delegate updateUI:food];
}
}

这里的委托(delegate)值为nil。任何人都知道这个问题的根源。

我正在这样调用我的委托(delegate)。这是 .h 文件{

 @interface NHMainViewController : UIViewController<parsingComplete>

@property(nonatomic, strong)ATAFoodParser *foodParser;
@end

这里是.m文件

{

@implementation NHMainViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
self.foodParser = [[ATAFoodParser alloc] init];
self.foodParser.delegate = self;
// Do any additional setup after loading the view.
}


-(void) updateUI:(NSMutableDictionary*)foodList{
NSLog(@"Dictionary:---->%@", foodList);
}

@end

updateUI 是我的委托(delegate)方法,应该调用它。我在这里没有回电话。我去了我的第一个类,在那里我创建了我的协议(protocol),我打印了委托(delegate)..它是零..

最佳答案

您的问题似乎是您没有将“foodParser”作为属性或实例变量保存:

- (void)viewDidLoad 
{
[super viewDidLoad];
ATAFoodParser *foodParser = [[ATAFoodParser alloc] init];
foodParser.delegate = self;
}

foodParser”是一个局部变量,它会在“viewDidLoad”完成后立即消失(或被 ARC 释放)。

要解决这个问题,如果您在 NHMainViewController 的 .h 文件中设置一个属性,例如

@property (strong) ATAFoodParser * foodparser;

然后您可以将“viewDidLoad:”中的那一行更改为:

self.foodParser = [[ATAFoodParser alloc] init]; 
self.foodparser.delegate = self;

你应该可以开始了。

关于ios - 自定义委托(delegate)返回 nil 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20811266/

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