如果字符串值包含字符'&',应用程序崩溃

时间:2014-03-22 08:43:55

标签: ios character-encoding

我正在使用从Web服务器上的PHP文件接收的JSON数组。

这是我正在使用的代码:

NSMutableString *ms = [[NSMutableString alloc] initWithString:@"http://mujercanariasigloxxi.appgestion.eu/app_php_files/comprobartipo.php?id="];
    NSString *tipo=[[view annotation] title];
     NSString* urlTextEscaped = [tipo stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    [ms appendString:urlTextEscaped];
    NSLog(@"TIPO ES AQUI %@", urlTextEscaped);


    NSURLRequest *request1 = [NSURLRequest requestWithURL:[NSURL URLWithString:ms]];

    [NSURLConnection sendAsynchronousRequest:request1 queue:[NSOperationQueue mainQueue] completionHandler: ^(NSURLResponse *response, NSData *data1, NSError *connectionError) {
        if (data1) {
            NSArray *array = [NSJSONSerialization JSONObjectWithData:data1 options:0 error:nil];
            NSLog(@"PROCEDENCIA DESDE INTERNET %@", [array objectAtIndex:0]);
            NSLog(@"ESTO ES DATA en If %@",data1);
        }else{
            NSLog(@"ESTO ES DATA en ELSE %@",data1);
            // Tell user there's no internet or data failedN
            NSLog(@"NO HAY CONEXION");
        }
    }];

代码工作正常,但如果NSString *tipo的字符串值包含&这样的字符,则应用会崩溃。

错误:

  

'NSRangeException',原因:' * - [__ NSArrayI objectAtIndex:]:索引0   超出空数组'

的界限

欢迎任何帮助以避免此问题。

1 个答案:

答案 0 :(得分:1)

你的崩溃将在这里,

NSArray *array = [NSJSONSerialization JSONObjectWithData:data1 options:0 error:nil];

NSLog(@"PROCEDENCIA DESDE INTERNET %@", [array objectAtIndex:0]); // Crash will be here

您应该检查数组是否有对象。

让我们尝试如下

if (array.count)
    NSLog(@"PROCEDENCIA DESDE INTERNET %@", [array objectAtIndex:0]);

谢谢!