通过自定义委托将字典从VC发送到另一个VC

时间:2016-10-24 11:34:57

标签: objective-c iphone

我有一个类来自服务器的响应来自responseDictionary。我想在另一个VC中使用这个responseDictionary但是不能通过委托发送字典。用目标c中的代码解释如何实现这一点。

1 个答案:

答案 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服务并将其设置为委托