【发布时间】:2012-04-19 15:11:56
【问题描述】:
我正在使用 AFNetworking 客户端对象,它对 XML 文档发出异步请求并对其进行解析。
还使用 NSNotificationCenter 在文档完成解析时发布通知。
有没有办法在不阻塞主线程的情况下等待发布通知?
例如代码:
-(void)saveConfiguration:(id)sender {
TLHTTPClient *RESTClient = [TLHTTPClient sharedClient];
// Performs the asynchronous fetching....this works.
[RESTClient fetchActiveUser:[usernameTextField stringValue] withPassword:[passwordTextField stringValue]];
/*
* What do I need here ? while (xxx) ?
*/
NSLog(@"Fetch Complete.");
}
基本上我想知道在上述指定区域中我需要什么样的代码来确保函数等待直到获取完成?
现在我会在获取完成之前在调试控制台中看到 “Fetch Complete.”。
我尝试在 TLHTTPClient 类中添加一个 BOOL 标志:
BOOL fetchingFlag;
然后尝试:
while([RESTClient fetchingFlag]) { NSLog(@"fetching...); }
当此类收到通知时,它会设置 RESTClient.fetchingFlag = FALSE;从技术上讲,哪个应该杀死while循环?除了我的while循环无限运行?!
【问题讨论】:
-
你可以在另一个线程中等待吗?
-
你可以在单独的线程中进行解析
-
如果你注册一个通知,你已经在等待而不阻塞主线程,对吧?
-
@WolfgangSchreurs 添加代码进一步解释。
-
这里不清楚你想要什么。您不希望在异步作业完成之前发布通知吗?在工作结束时发布,而不是在开始之后立即发布。这就是重点。抱歉,如果我遗漏了什么。
标签: objective-c cocoa nsnotificationcenter nsnotifications