0

我有一个刚刚打开的应用程序调用了一个网络服务器页面,它给了我一个 json 字符串。当我在本地网络上时,一切正常,但是当我在本地网络之外打开应用程序并且没有 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 的问题,该参数的 timeoutInterval 参数在 n 秒后关闭连接。

4

2 回答 2

0

除其他事项外,您未能:

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

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

于 2012-11-01T19:51:30.113 回答
0

这段代码有用吗?

  1. 你应该检查error[NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:&error];
  2. 您正在读取 URL 数据urlString,然后从未初始化的位置获取 NSDatanewStr并对其进行解析?
  3. 再次,您应该error在提供任何其他内容之前始终检查
  4. 为什么您将数据读取为 ASCII 而将 NSData 读取为 UTF8?
于 2012-11-01T20:08:39.293 回答