我使用此代码,但“它有效”不会发生。
DetailViewController.h
[#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@protocol ProtocolNameDelegate
-(void)DoSomething;
@end
@interface DetailViewController : UIViewController {
id<ProtocolNameDelegate> _delegate;
}
@property (strong, nonatomic) id<ProtocolNameDelegate> _delegate;
DetailViewController.m
@synthesize _delegate;
- (void)viewDidLoad
{
[super viewDidLoad];
[_delegate DoSomething];
}
MasterViewController.h
@interface MasterViewController : UITableViewController <ProtocolNameDelegate>
MasterViewController.m
-(void)DoSomething
{
NSLog(@"It works");
}
我想我必须添加以下内容:
MasterViewController* mvc = [[MasterViewController alloc] init];
mvc._delegate = self;
但它给出了一个错误,顺便说一下它会创建另一个MasterViewController实例吗?
答案 0 :(得分:1)
而不是
MasterViewController* mvc = [[MasterViewController alloc] init];
mvc._delegate = self;
写这个,
DetailViewController* svc = [[DetailViewController alloc] init];
dvc._delegate = self;
你在实施中犯了错误。
实施摘要应该是。
DetailVCObj.delegate = self;
答案 1 :(得分:0)
在MasterViewController.m
中,您需要在某处分配和初始化DetailViewController
DetailViewController* dvc = [[DetailViewControlleralloc] init];
dvc._delegate = self;
另外,因为你在
中写了[_delegate doSomething]
DetailviewController's viewDidLoad
方法,
表示您必须在dvc._delegate = self;
MasterViewController.m
在加载 dvc的视图之前(在addSubview或加载视图的任何内容之前)。