JSON回答检查服务器是否可访问

时间:2012-11-01 19:33:28

标签: iphone ios json reachability

我有一个刚打开的应用程序调用一个给我一个json字符串的webserver页面。 当我在本地网络上时,所有工作都没有问题,但当我在本地网络外打开应用程序而没有vpn应用程序崩溃。 如何控制json字符串? 这是我的代码:

NSString *urlstr = [[NSString alloc] initWithFormat:@"%@yes.php", av];
NSURL *url = [[NSURL alloc] initWithString:urlstr];

NSError* error = nil;
NSString* urlString = [NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:&error];
NSString *newStr;

NSData* data=[newStr dataUsingEncoding:NSUTF8StringEncoding];

NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data 

                                                     options:kNilOptions 
                                                       error:&error];

sn1 = [[json objectForKey:@"Rele1"] intValue];

我想将json答案与NULL值进行比较,如果两个参数相等,我会显示警告。

编辑:如果我尝试读取任何值,应用程序崩溃等待json回复... 我用NSURLRequest绕过了问题,并使用了在n秒后关闭连接的timeoutInterval参数。

2 个答案:

答案 0 :(得分:0)

除此之外,你没有:

  • 检查从远程URL获取ASCII编码字符串的尝试是否失败(显而易见的可能性:URL无法访问,结果是UTF-8而不是ASCII);
  • 检查JSON解析是否成功(显而易见:服务器404d并返回HTML错误页面)
  • 检查返回的JSON对象是否实际上是一个字典(例如,它可能是一个数组,在这种情况下调用objectForKey:会引发异常)

将返回数据解析为ASCII然后重新编码为UTF-8也可能是多余的 - 因为一个超过另一个它具有阈值测试的效果,否则会阻止可接受的结果继续进行。

答案 1 :(得分:0)

此代码是否有效?

  1. 您应该在error
  2. 之后查看[NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:&error];
  3. 您正在将网址数据读入urlString但是从未初始化的newStr获取NSData并解析它?
  4. 再次,无论何时提供error,您都应该先检查
  5. 为什么要将数据读取为ASCII,而将NSData读取为UTF8?