问题描述
我知道这个问题已经在这里被问过很多次了.但我是第一次处理这件事,但仍然无法在我的脑海中完美地实现它.这是我实现的委托方法的代码,用于将数据从 SecondViewController 传递到 FirstViewController.
I know this question has been asked and answered many times over here. But I am dealing with this thing for the first time and still not able to get the perfect implementation of it in my mind. Here's the code I have the delegate method I implement to pass data from SecondViewController to FirstViewController.
FirstViewController.h
#import "SecondViewController.h"
@interface FirstViewController : UITableViewController<sampleDelegate>
@end
FirstViewController.m
@interface FirstViewController ()
// Array in which I want to store the data I get back from SecondViewController.
@property (nonatomic, copy) NSArray *sampleData;
@end
@implementation FirstViewController
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
SecondViewController *controller = [[SecondViewController alloc] init];
[self.navigationController pushViewController:controller animated:YES];
}
@end
SecondViewController.h
@protocol sampleDelegate <NSObject>
- (NSArray*)sendDataBackToFirstController;
@end
@interface SecondViewController : UITableViewController
@property (nonatomic, strong) id <sampleDelegate> sampleDelegateObject;
@end
SecondViewController.m
@interface SecondViewController ()
@property (strong, nonatomic) NSArray *dataInSecondViewController;
@end
@implementation SecondViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.dataInSecondViewController = [NSArray arrayWithObjects:@"Object1", @"Object2", nil];
}
- (NSArray*)sendDataBackToFirstController
{
return self.dataInSecondViewController;
}
@end
我做得对吗?我只希望它将 self.dataInSecondViewController 中的数据发送到 FirstViewController 并将其存储在 NSArray 属性 sampleDataFirstViewController 的代码>.
Am I doing it correctly? All I want it to send the data in self.dataInSecondViewController to FirstViewController and store it over there in the NSArray property sampleData of FirstViewController.
不知何故,我无法访问 FirstViewController 中的 sendDataBackToFirstController.我还缺少什么其他东西来访问 sendDataBackToFirstController 那里?
Somehow I am not able to access sendDataBackToFirstController in FirstViewController. What other things I am missing implementing to access sendDataBackToFirstController there?
推荐答案
不太对.首先,您需要在第一个视图控制器中分配委托属性,以便第二个视图控制器知道要向哪个对象发送消息.
Not quite right. First you need to assign the delegate property in the first view controller so the second view controller knows which object to send messages to.
FirstViewController.m
FirstViewController.m
controller.delegate = self;
其次,您可以向后发送和接收委托方法.您以 FirstViewController 预计在第二个控制器上调用 sendDataBackToFirstController 的方式设置它.在委托模式中,SecondViewController 是发送消息并可选择使用该方法发送数据的那个.所以,你应该把你的委托声明改成这样:
Second, you have the sending and receiving of your delegate method backwards. You have it setup in a way where the FirstViewController is expected to call sendDataBackToFirstController on the second controller. In a delegate pattern, the SecondViewController is the one that sends the message and optionally sends data with that method. So, you should change your delegate declaration to something like this:
@protocol sampleDelegate <NSObject>
- (void)secondControllerFinishedWithItems:(NSArray* )newData;
@end
然后,当您的 SecondViewController 完成其任务并需要通知其委托时,它应该执行以下操作:
Then, when your SecondViewController finishes its tasks and needs to notify its delegate, it should do something like this:
// ... do a bunch of tasks ...
// notify delegate
if ([self.delegate respondsToSelector:@selector(secondControllerFinishedWithItems:)]) {
[self.delegate secondControllerFinishedWithItems:arrayOfNewData];
}
我在这里添加了一个额外的 if 语句来检查以确保委托会在实际发送之前响应我们想要发送的方法.如果我们的协议中有可选方法但没有这个,应用就会崩溃.
I added an extra if statement here to check to make sure the delegate will respond to the method we want to send it before actually sending it. If we had optional methods in our protocol and did not have this, the app would crash.
希望这会有所帮助!
这篇关于使用委托和协议在 2 个 UIViewController 之间传递数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)