我有NSURLConnection从我的Web服务器获取JSON值。代码放置在可以从其他UIViewController调用的类中。
但是,我有点不确定如何从类中返回 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];
这应该将接收到的数据附加到您正在"构建"的累积数据中。