从类返回 NSURL 连接数据



我有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];

这应该将接收到的数据附加到您正在"构建"的累积数据中。

最新更新