0

我使用此代码,但“它有效”不会发生。

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;

细节视图控制器.m

@synthesize _delegate;

- (void)viewDidLoad
{
    [super viewDidLoad];

    [_delegate DoSomething];
}

主视图控制器.h

@interface MasterViewController : UITableViewController <ProtocolNameDelegate> 

主视图控制器.m

-(void)DoSomething
{
    NSLog(@"It works");

}

我想我必须添加类似的内容:

MasterViewController* mvc = [[MasterViewController alloc] init];
    mvc._delegate = self;

但是它给出了一个错误,顺便说一下它会创建另一个 MasterViewController 实例吗?

4

2 回答 2

1

代替

MasterViewController* mvc = [[MasterViewController alloc] init];
mvc._delegate = self;

写这个,

DetailViewController* svc = [[DetailViewController alloc] init];
dvc._delegate = self;

你在执行中犯了错误。

实施摘要应该是。

  • 在 DetailVC 中创建协议。
  • 为 Delegate、Synthesize 和拨打电话创建属性。
  • 在 MasterVC 中导入 DetailVC 并在 MasterVC.h 中包含委托
  • 在 MasterVC.m 中实现协议方法
  • 创建 DetailVC 的实例并分配DetailVCObj.delegate = self;
于 2013-07-23T11:12:07.710 回答
0

MasterViewController.m中,您需要在DetailViewController某处分配和初始化

DetailViewController* dvc = [[DetailViewControlleralloc] init];
    dvc._delegate = self;

另外,因为你已经写[_delegate doSomething]

DetailviewController's viewDidLoad方法,

这意味着你必须 dvc._delegate = self;设置MasterViewController.m

在加载dvc 的视图之前(在 addSubview 或任何加载视图之前)。

于 2013-07-23T11:12:44.187 回答