[英]Return NSURLConnection data from class
我有NSURLConnection可以从我的Web服务器获取JSON值。 该代码放置在可以从其他UIViewControllers调用的类中。
我不确定如何从该类返回JSON数据。
这是我尝试过的:+(NSJSONSerialization *)getTask:(id)task_id {
NSJSONSerialization *json;
NSLog(@"task id = %@", task_id);
NSString *post = [NSString stringWithFormat:@"&task_id=%@", task_id];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%lu",(unsigned long)[postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.iampeterstuart.co.uk/todo/index.php/task/get"]]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"];
[request setHTTPBody:postData];
NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES];
[conn start];
return json;
}
// Log the response for debugging
+ (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
NSLog(@"Resonse: %@", response);
}
+ (void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data {
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSJSONSerialization *json = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
}
// Declare any connection errors
+ (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSLog(@"Error: %@", error);
}
每次变量json
为空?
有人可以请教吗?
非常感谢,
彼得
您正在错误地考虑委托的行为。
只要有新数据可用(从服务器下载),便会调用(void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data
,这是字节流的原始字节。 您应该有一个NSMutableData
实例,并在接收到数据时将接收到的数据附加到可变数据中。 最后,当下载全部数据(例如您的示例中的JSON字符串)时,将调用-(void)connectionDidFinishLoading:(NSURLConnection *)connection
。 在该方法中,您应该解析JSON字符串:
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSJSONSerialization *json = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
...其中data
是接收到的累积数据。 您可以在类实现中如下创建数据实例:
NSMutableData *cumulativeData;
在init
或开始加载之前在委托上最初调用的任何方法中,请调用:
cumulativeData = [NSMutableData data];
然后在您的(void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data
方法中,调用:
[cumulativeData appendData:data];
那应该将接收到的数据附加到您正在“构建”的累积数据中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.