2017-03-21 6 views
0

このコードのどこにエラーがあるのか​​を教えてください。私はメソッドmyMethodToDoStuffを呼びたくありません。それがうまくいく他の方法はありますか?このコードのどこにエラーがありますか?

MyClass.hファイルには、(コメント付きデリゲートの行を追加します!)、次のようになります

#import <BlaClass/BlaClass.h> 

@class MyClass;    //define class, so protocol can see MyClass 
@protocol MyClassDelegate <NSObject> //define delegate protocol 
    - (void) myClassDelegateMethod: (MyClass *) sender; //define delegate method to be implemented within another class 
@end //end protocol 

@interface MyClass : NSObject { 
} 
@property (nonatomic, weak) id <MyClassDelegate> delegate; //define MyClassDelegate as delegate 

@end 

MyClass.mファイルが別のクラスにデリゲートを使用するには、この

#import "MyClass.h" 
@implementation MyClass 
@synthesize delegate; //synthesise MyClassDelegate delegate 

- (void) myMethodToDoStuff { 
    [self.delegate myClassDelegateMethod:self]; //this will call the method implemented in your other class  
} 

@end 

のようになります(

#import "MyClass.h" 
@interface MyVC:UIViewController <MyClassDelegate> { //make it a delegate for MyClassDelegate 
} 

MyVC.m:

01のUIViewControllerはMyVC.h)、この場合にMyVCと呼ばれます
myClass.delegate = self;   //set its delegate to self somewhere 

デリゲートメソッド

- (void) myClassDelegateMethod: (MyClass *) sender { 
    NSLog(@"Delegates are great!"); 
} 
+0

それは問題はあなたが持っていることは何か本当にはっきりしていません。コードはどこに問題がありますか? –

+0

myMethodToDoStuffこのメソッドはここで呼び出されていません。 –

+0

他のすべての人には、コードは機能していますが、私には分かりません。私はここからコードをコピーしました。 http://stackoverflow.com/a/12660523/7743539 –

答えて

0

を実装する任意の誤りがあるように表示されません - これは、デリゲートの正しい実装です。 myClassDelegateMethod:を呼び出すには、MyClass内の何かがmyMethodToDoStuffを呼び出す必要があります。たとえば、一般にアクセス可能な別のメソッドを作成すると、myMethodToDoStuffが呼び出されます。その後、このメソッドはMyVCで呼び出すことができます。

@interface MyClass : NSObject { 
} 
@property (nonatomic, weak) id <MyClassDelegate> delegate; //define MyClassDelegate as delegate 

- (void) someOtherMethod; 

@end 

そしてMyClass.m

MyVCで
#import "MyClass.h" 
@implementation MyClass 
@synthesize delegate; //synthesise MyClassDelegate delegate 

- (void) myMethodToDoStuff { 
    [self.delegate myClassDelegateMethod:self]; //this will call the method implemented in your other class  
} 

- (void) someOtherMethod { 
    [self myMethodToDoStuff]; 
} 

@end 

そして最後にで:

myClass.delegate = self;   //set its delegate to self somewhere 
[myClass someOtherMethod]; 
関連する問題