如何使方法等待响应以返回值?

时间:2016-06-17 05:01:10

标签: ios objective-c

我确信之前已经问过,但我不知道搜索它的关键字。

假设我有一个返回tr = aliased(TaskRevision) q = s.query(TaskRevision.task_id, TaskRevision.id, TaskRevision.title).filter( s.query(func.count(tr.id)) \ .filter(tr.id >= TaskRevision.id) \ .filter(tr.task_id == TaskRevision.task_id) \ .as_scalar() <= 2) \ .order_by(TaskRevision.task_id).all() 的函数validateConnection。此函数调用服务器(使用anetworking)并在请求成功时返回bool(这只是一个示例)。

我希望我的方法等到响应回来才能返回true:如何实现?

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:2)

其被叫Block您可以通过Introduction to Objective-C Blocks

了解更多关于阻止的信息

以下是创建块及其回调的示例方法:

-(void)callmethodwith:(NSString*)string withCompletion:(void(^)(BOOL success, NSError* error, id responce))completion
{

    NSString *str =[NSString stringWithFormat:@"MY FUNTn CALLBACK %@",string];
    if (completion){
        dispatch_async(dispatch_get_main_queue(), ^{
            completion(YES,nil,str); // here that call when method complete
        });
    }
}

你可以这样称呼它:

[self callmethodwith:@"My new" withCompletion:^(BOOL success, NSError *error, id responce) {
        if(success)
        {
            NSLog(@"==%@",responce); // here you get response once method camplet
        }
    }];

答案 1 :(得分:1)

我认为,一旦该方法执行,就无法阻止它。

但如果没有被解雇,你可以取消。

喜欢以下方式;

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(yourMethod) object:nil];
[self performSelector:@selector(yourMethod) withObject:nil afterDelay:5.0];

答案 2 :(得分:0)

您可以使用AFNetworking成功和失败方法等待响应。或者,您可以使用performSelectorOnMainThread方法

[yourViewController performSelectorOnMainThread:@selector(yourFunction:) withObject:nil
waitUntilDone:YES];

答案 3 :(得分:-1)

使用块或完成处理程序时,请确保您没有使用类或任何视图的强引用,因为它会影响保留计数。

使用块或完成处理程序时,在块内部使用弱引用,类似这样,

__weak Class *weakSelf = self;
[manager communicateUsingGETMethod:@"www.google.com" parameterDictionary:@{} success:^(id successDicitoanary) {
    // Call using weak reference.
[weakSelf handleSuccess];
} failure:^(NSError *error) {
    [weakSelf handleFailure];
}];

并单独编写整个代码。这将使代码更具可读性,并且当您使用弱引用调用completionCode时,您也将摆脱保留周期,

供您参考,请阅读Avoid Strong Reference Cycles when Capturing self

的apple doc