iphone ios线程问题:使用dispatch\u async时委托对象没有响应
这是我的密码: main.miphone ios线程问题:使用dispatch\u async时委托对象没有响应,iphone,multithreading,ios,delegates,Iphone,Multithreading,Ios,Delegates,这是我的密码: main.m - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { FetchManager *fetchManager = [FetchManager sharedInstance]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORI
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
FetchManager *fetchManager = [FetchManager sharedInstance];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0), ^{
[fetchManager fetchData];
});
//regular code continues
}
FetchData.m(这是一个单例类)
问题:未激发任何NSXMLParserDelegate协议方法。我不知道为什么。如果我删除didFinishLaunchingWithOptions方法中的“dispatch_async”,那么一切都会按预期进行—NSXMLParserDelegate协议方法将被触发
有人看到问题了吗?有两件事会跳出来:
正如Caleb所述,NSURLConnection需要一个运行循环。实现所需功能的一种方法是创建NSOperation的子类,该子类使循环保持活动状态并管理委托回调。另一种方法是使用这个惊人的新Api,它只需要创建一个NSOperationQueue,但仅在iOS5上可用
sendAsynchronousRequest:queue:completionHandler
,谢谢您提供的信息!我真正想做的是有一个后台线程,每5分钟从中获取数据。实际上,我想把[fetchManager fetchData];被一个能睡5分钟的while(真)循环包围。每个人都在循环。显然,这不起作用。我不知道在后台从url轮询数据的更好方法是什么。-(BOOL)应用程序:(UIApplication*)应用程序使用选项完成启动:(NSDictionary*)启动选项{FetchManager*FetchManager=[FetchManager sharedInstance];而(true){dispatch_async(dispatch_get_global_queue)(dispatch_queue_PRIORITY_HIGH,0),^{[fetchManager fetchData];}}};
但这显然不起作用。我的情况几乎是一样的,我仍然没有找到答案(
- (id)getInstance { ... }
- (void)fetchData
{
NSURL *url = [NSURL URLWithString:@"http://www.data.xml"];
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];
if (connectionInProgress) {
[connectionInProgress cancel];
[connectionInProgress release];
}
[xmlData release];
xmlData = [[NSMutableData alloc] init];
connectionInProgress = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
}
/*and all necessary NSXMLParserDelegate protocol methods are implemented - not shown here*/