2015-08-19 3 views
0

Я создал простой пример использования делегата. Проблема в том, что при запуске приложения вызывается класс MyClass и отправляется делегат. Но я не могу получить его в ViewController. Ниже мой код я хотел бы знать, что я сделал неправильно, и если я понимаю делегатов ошибочно.Класс NSObject Делегаты не вызываются

Извинения за мою грамматическую ошибку. Спасибо за помощь заранее

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 ]; 
} 

Метод myClassDelegateMethod в viewController.m не вызывается.

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

ответ

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_; 

Это должно быть 'слабой' (не сильно). И вы должны проверить действительный делегат, прежде чем что-либо сделать.

REF: Differences between strong and weak in Objective-C

+0

Hey его работы в настоящее время. Спасибо за описание. – Jaff

+0

Также возможно, если я создаю MyClass для одного класса? Будут ли делегаты работать, и правильно ли использовать их в этом случае? – Jaff

+0

Да, одноэлементный класс почти одинаковый с обычным классом. – anhtu

Смежные вопросы