我的代理示例有点麻烦。我创建了一个非常简单的代码来了解委托的工作方式。我知道我的代表不会被召唤,但我无法弄明白为什么? 所以这是完整的代码。请告诉我我做错了什么。对我来说理解这段代码中的错误非常重要。
First Viewcontroller:h.file
#import <UIKit/UIKit.h>
@protocol ViewControllerDelegate;
@interface ViewController : UIViewController
@property (nonatomic, retain) id<ViewControllerDelegate> delegate;
@end
@protocol ViewControllerDelegate <NSObject>
- (void)transfer:(ViewController *)data number:(NSUInteger)value;
@end
First Viewcontroller:m.file
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize delegate;
- (void)viewDidLoad
{
[super viewDidLoad];
if ([delegate respondsToSelector:@selector(transfer:number:)]){
[delegate transfer:self number:65];
NSLog(@"delegate called");
}
[delegate transfer:self number:65]; //Try to call without if-statement.
}
@end
SecondViewcontroller:h.file
#import <UIKit/UIKit.h>
#import "ViewController.h"
@interface SecondViewController : UIViewController <ViewControllerDelegate>
@end
SecondViewcontroller:m.file
#import "SecondViewController.h"
@interface SecondViewController ()
@end
@implementation SecondViewController
- (void)transfer:(ViewController *)data number:(NSUInteger)value
{
NSLog(@"received information from ViewController");
}
- (void)viewDidLoad
{
[super viewDidLoad];
ViewController *viewcontroller = [[ViewController alloc] init];
viewcontroller.delegate = self;
}
@end
在故事板中我使用两个容器视图,因此两个ViewControllers都会显示。
答案 0 :(得分:0)
您当前的代码没问题。问题似乎是您从未加载视图控制器视图,因此未调用viewDidLoad
方法。
要进行测试,请按viewcontroller
或仅请求viewcontroller.view
。