2016-10-24 7 views
-1

私は、サーバからの応答がresponseDictionaryとして来るクラスを持っています。このresponseDictionaryを別のVCで使いたいが、代理人を介して辞書を送ることはできません。これをどのように達成できるかを客観的なコードで記述してください。カスタム代理人を介してVCから別のVCに辞書を送信する

+0

としてそれを設定することができますVC遷移にVCのためのseguesを使用していますか? –

答えて

0

サンプルプロジェクト、それは単にデモ用で、uがそれは

まず、我々はWebServiceそれがデータを要求するクラス名を作成します参照することができ、その応答として、それは辞書を取得し、また、それが定義されてそのデータを通知するデリゲートを受信して​​WebService.m

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 

に(あなたのケースで)VCに送信されます

#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秒後には、我々はメソッド呼び出すために作られ、それが他の方法receievedSomeData:メソッドを呼び出しを送信しますこれで、気象の呼び出し元がメソッドを実装しているかどうかを確認しています(オブジェクトに送信された認識できないセレクタ)を回避するかどうかをチェックしています。データ(ディクショナリ)をv IEWコントローラ

ともuは任意のクラス(どんなのViewController)からWebサービスを呼び出すと、デリゲート

+0

こんにちは!私はそれを試してみました...ちょっと疑問を持っています - (void)webService :(WebService *)aWebService didReceievResponseData:(NSDictionary *)dataDictionaryのボタンクリック – FreshStar

+0

ボタンがViewControllerにあり、これが欲しいこのボタンのクリックで動作する関数 – FreshStar

+0

' - (void)webService:(WebService *)aWebService didReceievResponseData:(NSDictionary *)dataDictionary'は、データを受け取るためにWebサービスから呼び出されます。そのデータを次のビューコントローラに送信したい場合は、別のデリゲートまたは通知を使用するか、初期化中にその辞書を第2のビューコントローラに割り当てることができます –

関連する問題