我确信之前已经问过,但我不知道搜索它的关键字。
假设我有一个返回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
:如何实现?
非常感谢任何帮助!
答案 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时,您也将摆脱保留周期,
的apple doc