Objective c 如何从json Web服务获取数据
我有一个webmethod,它返回大量json数据。 我有一个单独的类,在那里我获取数据。在这节课上,我做了以下几点Objective c 如何从json Web服务获取数据,objective-c,ios,json,nsdictionary,Objective C,Ios,Json,Nsdictionary,我有一个webmethod,它返回大量json数据。 我有一个单独的类,在那里我获取数据。在这节课上,我做了以下几点 + (NSDictionary *)executeGenkFetch:(NSString *)query { query = [NSString stringWithFormat:@"%@&format=json&nojsoncallback=1", query]; query = [query stringByAddingPercentEscap
+ (NSDictionary *)executeGenkFetch:(NSString *)query
{
query = [NSString stringWithFormat:@"%@&format=json&nojsoncallback=1", query];
query = [query stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// NSLog(@"[%@ %@] sent %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), query);
NSData *jsonData = [[NSString stringWithContentsOfURL:[NSURL URLWithString:query] encoding:NSUTF8StringEncoding error:nil] dataUsingEncoding:NSUTF8StringEncoding];
NSError *error = nil;
NSDictionary *results = jsonData ? [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:&error] : nil;
if (error) NSLog(@"[%@ %@] JSON error: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), error.localizedDescription);
// NSLog(@"[%@ %@] received %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), results);
return results;
}
+ (NSArray *)GetNieuws
{
NSString *request = [NSString stringWithFormat:@"http://www.krcTest.be/mobile/json/request/webmethod"];
return [[self executeGenkFetch:request] valueForKeyPath:@"news.title"];
}
现在我有了一个按钮来对数据进行NSLog。这里你可以看到按钮后面的动作
- (IBAction)testFetch:(id)sender {
NSArray *nieuws;
nieuws = [GenkData GetNieuws];
NSLog(@"%@",nieuws);
}
在我的日志中总是显示这个
2012-10-01 10:52:16.379拉辛根[13434:c07](空)
有人能帮我吗?我建议使用AFNetworking,它可以使处理JSON/XML以及整个web请求变得更容易。你可以在这里读到 来自GitHub自述文件的JSON示例请求
NSURL *url = [NSURL URLWithString:@"http://api.twitter.com/1/statuses/public_timeline.json"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
NSLog(@"Public Timeline: %@", JSON);
} failure:nil];
[operation start];
您的端点给出了一个DNS错误,这可能解释了您没有数据的原因,但是假设您已经指定了它,那么您可以自己调试它 首先不要像这样将方法调用链接在一起
NSData *jsonData = [[NSString stringWithContentsOfURL:[NSURL URLWithString:query] encoding:NSUTF8StringEncoding error:nil] dataUsingEncoding:NSUTF8StringEncoding];
取而代之的是prefer(特别要注意的是,您在一次调用中丢失了错误响应)
通过不将方法调用链接在一起,现在可以打印中间结果以查看问题所在,还可以使用断点更好地逐步解决问题
在这里,将这样的方法作为类方法而不是实例方法是很奇怪的,您应该知道,这样的同步网络使用将破坏您的UI性能,除非您是在另一个线程上执行的,我怀疑您不是。您可能希望查看NSURLConnection的异步网络方法
我没有检查上面的语法,因为我是在PC上输入的,但它应该为您指出正确的方向
NSError *error = nil;
NSURL *request = [NSURL URLWithString:query];
NSLog(@"Outgoing Request: %@",[request description]);
NSString *response = [NSString stringWithContentsOfURL:request encoding:NSUTF8StringEncoding error:nil];
if (error) {
NSLog(@"ERROR: Unable to get response %@",[error localizedDescription]);
}
NSLog("@Synchronous Response: %@",response);
NSData *jsonData = [response dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *results = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:&error];
if (error) {
NSLog(@"ERROR: Unable to parse JSON %@",[error localizedDescription]);
}