使用委托推回数据
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];以上是关于使用委托推回数据的主要内容,如果未能解决你的问题,请参考以下文章