使用委托推回数据

Posted

技术标签:

【中文标题】使用委托推回数据【英文标题】:Using delegate to push data back 【发布时间】:2013-07-23 11:07:04 【问题描述】:

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

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

【问题讨论】:

您正在详细创建委托ViewController 如何从masterViewController 的对象访问它 你的意思是#include "DetailViewController.h" 吗? 关于 SO 有很好的解释,看看这个***.com/questions/5210535/… 【参考方案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;

【讨论】:

我会有 2 个 DetailViewController 实例? 不,你只需要一个在你展示/推送细节视图的地方。 我认为这是因为在这种情况下我实际上有 2 个 尝试做一件事。将按钮放在详细信息上,然后单击按钮调用委托方法并测试它是否正常工作。 修复了使用 SecondViewController *secondVC = (SecondViewController *) segue.destinationViewController; [secondVC setDelegate:self];【参考方案2】:

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

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

另外,因为你在

中写了[_delegate doSomething]

DetailviewController's viewDidLoad 方法,

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

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

【讨论】:

这使我的代码正常: SecondViewController *secondVC = (SecondViewController *) segue.destinationViewController; [secondVC setDelegate:self];

以上是关于使用委托推回数据的主要内容,如果未能解决你的问题,请参考以下文章

QVector 总是推回 0?

将对象推回向量指针,对象类进入命名空间

推回地图容器

发布项目时,获取项目而不是尝试将 ID 推回结果是不是是正确的形式?

QT QTableView 使用委托

为啥将局部变量推回 Vectorworks