我正在从quizlet.com获取数据,对于简单的代码,它工作得很好:
-(void) grabbQuizletWithUrl:(NSURL*)requstURL {
NSString *dataString = [NSString stringWithContentsOfURL:requestURL encoding:NSUTF8StringEncoding error:&error];
NSDictionary *dict = [dataString JSONValue];
}但是我需要使用NSURLConnection来启动和停止活动指示器。我在努力
-(void) grabbQuizletWithUrl:(NSURL*)requstURL {
NSURLRequest *quizletRequest = [[NSURLRequest alloc] initWithURL:requestURL];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:quizletRequest
delegate:self];
[connection release];
[quizletRequest release];
}
// and getting data in delegate method:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[self.activityIndicator stopAnimating];
NSString *dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSDictionary *dict = [dataString JSONValue];
}我收到了这样的消息:
2377:707 -JSONValue失败。错误是:意外的输入结束
2377:707 -JSONValue失败。错误是:令牌的开始非法。
2377:707 -JSONValue失败。错误是:标记%d的开始非法
发布于 2011-07-16 05:27:02
在- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;中,您应该只将接收到的数据附加到先前存储的数据中,因为您只获得了响应的一部分,即:
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
// someNSMutableDataIVar is an ivar to store the data in
[someNSMutableDataIVar appendData:data];
}然后,在另一个名为- (void)connectionDidFinishLoading:(NSURLConnection *)connection;的委托方法中,您应该处理数据。
-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
// the connection finished loading all data, process...
[self.activityIndicator stopAnimating];
NSString *dataString = [[NSString alloc]
initWithData:someNSMutableDataIVar
encoding:NSUTF8StringEncoding];
NSDictionary *dict = [dataString JSONValue];
}苹果公司的URL Loading System Programming Guide中详细描述了异步网址加载系统。
希望这能有所帮助!
https://stackoverflow.com/questions/6713199
复制相似问题