NSObject类代理未被调用

时间:2015-08-19 03:11:29

标签: ios objective-c xcode

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

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

MyClass.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" );
}

1 个答案:

答案 0 :(得分:1)

问题是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_; 

应该是“弱”&#39; (不强)。在做任何事情之前,你必须检查有效的代表。

参考:Differences between strong and weak in Objective-C

相关问题