gpt4 book ai didi

ios - NSObject 类委托(delegate)不被调用

转载 作者:行者123 更新时间:2023-11-29 01:44:27 24 4
gpt4 key购买 nike

我创建了一个使用委托(delegate)的简单示例。问题是当我启动应用程序时,调用 MyClass 类并发送委托(delegate)。但是我无法在 ViewController 中接收到它。下面是我的代码,我想知道我做错了什么,以及我是否错误地理解了代表。

为我的语法错误道歉。感谢您提前提供帮助

我的类.h

@protocol MyClassDelegate <NSObject>
@required
- (void) myClassDelegateMethod;
@end

@interface MyClass : NSObject
{
id<MyClassDelegate> delegate_;
}
@property( nonatomic, strong ) id<MyClassDelegate> delegate_;

MyClass.m

@synthesize delegate_;

- (id)init
{
if (self = [ super init ] )
{
[ self myMethodDoStuff ];
}
return self;
}

- (void) myMethodDoStuff
{
[ self.delegate_ myClassDelegateMethod ];
}

ViewController.h

#import "MyClass.h"
@interface ViewController : UIViewController< MyClassDelegate >

ViewController.m

-( void ) viewDidLoad
{
[ super viewDidLoad ];
MyClass* class = [ MyClass new ];
[ class setDelegate_:self ];
[ self.view addSubView:class ];
}

viewController.m 中的 myClassDelegateMethod 方法没有被调用。

-(void)myClassDelegateMethod
{
NSLog( @"Delegates" );
}

最佳答案

问题是 MyClass* class = [ MyClass new ]; 调用 - (id)init 然后调用 [ self myMethodDoStuff ]; .

但此时 [ class setDelegate_:self ]; 还没有被调用。这意味着 self.delegate_ 没有指向任何东西(ViewController)。所以 -(void)myClassDelegateMethod 没有被调用

你应该先setDelegate,像这样:

[ class setDelegate_:self ];
[ class myMethodDoStuff ];

还有一个:

@property( nonatomic, strong ) id<MyClassDelegate> delegate_; 

它应该是“弱”(而不是强)。你必须在做任何事情之前检查有效的委托(delegate)。

编号:Differences between strong and weak in Objective-C

关于ios - NSObject 类委托(delegate)不被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32085918/

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