我有一个类来自服务器的响应来自responseDictionary。我想在另一个VC中使用这个responseDictionary但是不能通过委托发送字典。用目标c中的代码解释如何实现这一点。
答案 0 :(得分:0)
示例项目,它只是用于演示,你可以参考它
首先我们将创建一个类名WebService
它将请求数据,并作为响应它将获得一个字典,并且它还定义了一个委托来通知接收到的数据并发送给VC(在你的情况)
WebService.h
中的
#import <Foundation/Foundation.h>
@protocol WebServiceDelegate;
@interface WebService : NSObject
{
}
@property(nonatomic, assign) id<WebServiceDelegate>webServiceDelegate;
- (void)webserviceRequestData; //initiates the data request
@end
@protocol WebServiceDelegate <NSObject>
- (void)webService:(WebService *)aWebService didReceievResponseData:(NSDictionary *)dataDictionary;
@end
WebService.m
中的
#import "WebService.h"
@implementation WebService
- (instancetype)init
{
self = [super init];
if(self)
{
}
return self;
}
- (void)webserviceRequestData
{
sleep(5); //for demo
[self makeWebserviceToGetSomeData];
}
- (void)makeWebserviceToGetSomeData
{
NSDictionary *data = [NSDictionary dictionaryWithObjectsAndKeys:@"Data_1",@"Key_1",@"Data_2",@"Key_2",@"Data_3",@"Key_3", nil];
[self receievedSomeData:data];
}
//finally data is received as dictionary and send it to VC
- (void)receievedSomeData:(NSDictionary *)dataDictionary
{
if([self.webServiceDelegate respondsToSelector:@selector(webService:didReceievResponseData:)])
[self.webServiceDelegate webService:self didReceievResponseData:dataDictionary];
}
@end
并在视图控制器类ViewController.h
#import <UIKit/UIKit.h>
#import "WebService.h"
@interface ViewController : UIViewController<WebServiceDelegate>
@property(nonatomic, strong) WebService *myWebService;
@end
并在ViewController.m
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_myWebService = [[WebService alloc] init];
_myWebService.webServiceDelegate = self; //this is call back to this class
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[_myWebService webserviceRequestData];
}
- (void)webService:(WebService *)aWebService didReceievResponseData:(NSDictionary *)dataDictionary
{
NSLog(@"web data:%@",dataDictionary.description);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
5秒后我们调用方法makeWebserviceToGetSomeData
并且它将调用另一个方法receievedSomeData:
方法,我们正在检查天气调用者是否实现了方法,以避免崩溃(无法识别的选择器)发送到对象),我们将数据(字典)传递给视图控制器
并且您也可以从任何类(任何viewcontroller)调用Web服务并将其设置为委托