【问题标题】:Callback response from ControllerB to ControllerA从控制器到控制器的回调响应
【发布时间】:2016-08-31 04:39:51
【问题描述】:
我需要为我的一个项目制作 SDK,我需要做的是制作一个搜索类,它会返回来自 Web API 的响应,
我正在寻找这样的东西。
SearchController * sc = [[SearchController alloc] initWithSearchText:@"google"];
每次更改textField文本时都会调用此方法,并且我得到的响应应该是块状的。
任何帮助和参考将不胜感激。
【问题讨论】:
标签:
objective-c
iphone
objective-c-blocks
【解决方案1】:
SearchController.h
typedef void (^SearchHandler)(id results,NSError *error);
@interface SearchController : NSObject
{
SearchHandler searchBlock;
}
-(void)searchWithText:(NSString *)strText Results:(SearchHandler)searchResult;
SearchController.m
-(void)searchWithText:(NSString *)strText Results:(SearchHandler)searchResult
{
searchBlock = [searchResult copy];
//call api for text search
}
-(void)getResponseOfApi
{
//code where get api response
searchBlock(apiResonse,apiError);
}
使用块调用 SearchController api
SearchController * sc = [[SearchController alloc] init];
[sc searchWithText:@"google" Results:^(id results, NSError *error) {
//block with api response
}];
【解决方案2】:
您可以在SearchController 中创建一个阻止方法并获得所需类型的响应。
-(void)executeSearchRequestWithHandler:(void (^)(BOOL result))completionHandler {
//Do your api calling and than handle completionHandler
completionHandler(YES);
//You can set completionHandler type that you want like NSArray,NSString,NSDictionary etc
}
现在像这样调用这个方法。
[sc executeSearchRequestWithHandler:^(BOOL result) {
if (result) {
}
}];
注意:这里我创建了带有BOOL参数的块,你可以从NSArray,NSDictionary,NSString等响应中设置你想要的参数类型。