使用委托将数据推回

时间:2013-07-23 11:07:05

标签: ios uiviewcontroller delegates

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

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实例吗?

2 个答案:

答案 0 :(得分:1)

而不是

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

写这个,

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

你在实施中犯了错误。

实施摘要应该是。

  • 在DetailVC中创建协议。
  • 为委托,合成和拨打电话创建属性。
  • 在MasterVC中导入DetailVC并在MasterVC.h中包含委托
  • 在MasterVC.m中实施协议方法
  • 创建DetailVC的实例并指定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或加载视图的任何内容之前)。