我正在开发iOS应用。我创建了一个从服务器中提取数据的类。但是,当请求收到数据时,我需要调用创建类实例的视图控制器内的方法。
Request.m
- (id)initWithDictionary:(NSMutableDictionary *)dict
{
if (self = [super init]) {
[[API sharedInstance] commandWithParams:dict onCompletion:^(NSDictionary *json) {
for (NSString* key in json) {
//call method in view controller
}];
}
return self;
}
在某些视图控制器中:
//how I submit the request
Request *myRequest = [[Request alloc] initWithDictionary:myDict];
//the method I need to call onCompletion:
- (void)receivedRequest{}
如果有人可以现场就如何做到这一点,我将非常感激!
答案 0 :(得分:3)
这是代表设计模式的教科书应用程序:
设置协议。我们称之为requestProtocol。
定义Request对象在请求协议中需要调用的方法。
为您的Request类提供委托属性。设置委托以符合您的requestProtocol。
当您的视图控制器创建请求对象时,请将其自身设置为委托。
(这意味着您的视图控制器需要符合您的requestProtocol)
在您的Request对象中,当您开始解析JSON密钥时,请调用委托的receivedRequest方法。答案 1 :(得分:1)
授权的另一种方法是使用基于块的API,根据场景更方便。
- (id)initWithDictionary:(NSMutableDictionary *)dict requestCompletionHandler:(void(^)(NSString*, id))completionHandler
{
if (self = [super init]) {
[[API sharedInstance] commandWithParams:dict onCompletion:^(NSDictionary *json) {
if(completionHandler == nil) return;
for (NSString* key in json) {
completionHandler(key, json[key]);
}];
}
return self;
}
但我建议采用略有不同的方法实施。您不应该使用init
方法执行请求,而是在调用start
方法后执行请求。