繁体   English   中英

从类返回NSURLConnection数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM