私はこの問題の簡単な例としてこのテストケースを作成しました。デリゲートとプロトコルを正しく実装する
- AppDelegateがTestViewControllerを初期化し、ウィンドウ
- に追加TestViewControllerはTestViewにを初期化し、それTestViewにはTestSubViewを初期化し、サブビュー
として追加ビュー
お願いします。ありがとうございました。
編集:これ以上のエラーはありませんが、まだ動作しません。私がしたこと:プロトコル定義を別のファイルに移動し、インポートし、割り当てを保持し、ヘッダーの先頭にある@protocol TestDelegate宣言を削除しました。
私の問題は、TestViewController.mにデリゲートを割り当てないことです
TestViewController.h
#import <UIKit/UIKit.h>
@interface TestViewController : UIViewController <TestDelegate> {
int number;
}
-(void)assignNumber:(int)value;
-(void)displayNumber;
@property int number;
@end
はTestSubView.h
#import <UIKit/UIKit.h>
#import "TestViewController.h"
@interface TestSubView : UIView {
id<TestDelegate> delegate;
}
@property (nonatomic, retain) id<TestDelegate> delegate;
@end
を必要 @protocol TestDelegate
-(void)assignNumber:(int)value;
-(void)displayNumber;
@end
TestViewController.m
#import "TestViewController.h"
#import "TestView.h"
@implementation TestViewController
@synthesize number;
- (void)loadView {
TestView *myView = [[TestView alloc] initWithFrame:CGRectMake(0,0,320,480)];
self.view = myView;
[myView release];
}
-(void)assignNumber:(int)value {
NSLog(@"Number Assigned");
number = value;
}
-(void)displayNumber {
NSLog(@"%i",number);
}
をprotocol.hに移動し、インポート
TestSubView.m
#import "TestSubView.h"
#import "TestViewController.h"
@implementation TestSubView
@synthesize delegate;
- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
// Initialization code
[self setBackgroundColor:[UIColor redColor]];
[self setUserInteractionEnabled:YES];
}
return self;
}
- (void)dealloc {
[super dealloc];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.delegate assignNumber:5];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
[self.delegate displayNumber];
}
:これで終わるために
myView.delegate = self;
:
あなたは次の行にそれを行うだろうプロトコルに準拠したクラスで実行されます。 (実際には、これを変更しないと、後で不一致エラーが発生するので、これは避けるべきです)。なぜ、 'assignNumber:'がなぜですか?私はプロトコルのプロパティを宣言することをお勧めします。 –
TestViewクラスを追加できますか?それはあなたの問題がどこにあるのか分かりません。 – Rudiger
はTestSubViewがTestViewであることを意味しますか? – Ben