【发布时间】:2012-03-04 09:05:23
【问题描述】:
我想创建一个同步 nsurlconnection 请求。是的,我知道它很愚蠢,而且我知道它的局限性(冻结 UI),但是我想实现这一点的原因是我从服务器接收到的数据是按照发送的顺序接收的,这是好处之一同步连接..如果我没看错的话。
我将使用 Grand Central Dispatch 来实现一些多线程,以便运行同步请求,而不是让它影响主线程的 UI……但这可以稍后出现,我想掌握同步连接。
一个问题是我不确定如何将我的连接设置为同步..
这是我的代码。
- (void)loadComics{
[comics removeAllObjects]; //clears object of any old values
[[self tableView] reloadData];
NSURL *url = [NSURL URLWithString:@"http://www.comicbookresources.com/feed.php?feed=previews"];
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];
//clear any existing connection
if (connectionInProgress) {
[connectionInProgress cancel];
[connectionInProgress release];
}
[xmlData release];
xmlData = [[NSMutableData alloc] init];
connectionInProgress = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
[xmlData appendData:data];
}
- (void) connectionDidFinishLoading:(NSURLConnection *)connection{
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData];
[parser setDelegate:self];
[parser parse];
[parser release];
[[self tableView] reloadData];
}
任何例子都会很棒。
【问题讨论】:
-
“石榴石我从服务器接收的数据是按照发送顺序接收的”是什么意思?同步网络(即使在后台线程中)几乎总是表明设计不佳。
-
据我所知,异步有时会以错误的顺序接收数据。我必须与之通信的数据库引擎要求我同步执行此操作,因为它以正确的顺序接收数据很重要。为什么你认为它是糟糕设计的一个指标,我对你的观点很感兴趣,因为我目前只是按照我的指示去做,但是如果我可以向数据库工程师提出一个案例,说明他为什么应该这样做,否则我会有兴趣听听您的意见。
-
这是不正确的——你不必担心接收到的
connection:didReceiveData:回调乱序。您编写的内容看起来不错——您可以在收到数据块时将它们连接起来,并对connectionDidFinishLoading:中的完整数据进行处理。如果出于某种原因,您同时运行多个 NSURLConnections,所有这些都具有相同的委托,这只会是一个问题。但你通常不想这样做! -
好的,很酷,我明白你的意思,感谢您的澄清。
标签: iphone ios nsurlconnection sync