iphone - 应用程序崩溃的形式

时间:2013-05-30 22:26:19

标签: ios forms nsstring

在我的应用中,我有一个用户必须填写表单的视图。但是,有时候应用程序崩溃,在这个函数中,那个简单的cacth值字段并构建了一个url来给出

-(NSString*)urlToUpload{

    NSString *string1 =[[NSString alloc]init];
    string1= [NSString stringWithFormat:@"?nombre="];
    NSString *string2 =  [string1 stringByAppendingString:nameAdded];

//crash here

    NSString *string3 =  [string2 stringByAppendingString:@"&horario="];
    NSString *string4 =  [string3 stringByAppendingString:horarioAdded];


    NSString *string5 =  [string4 stringByAppendingString:@"&info="];
    NSString *string6 =  [string5 stringByAppendingString:infoAdded];

    NSString *string7 =  [string6 stringByAppendingString:@"&offerta="];
    NSString *string8 =  [string7 stringByAppendingString:offertaAdded];

    NSString *lat_string = [[[NSString alloc] initWithFormat:@"%f",locationToUpload2.latitude] autorelease];
    NSString *lon_string = [[[NSString alloc] initWithFormat:@"%f",locationToUpload2.longitude] autorelease];

    NSString *string9 =  [string8 stringByAppendingString:@"&latitude="];
    NSString *string10 =  [string9 stringByAppendingString:lat_string];

    NSString *string11 =  [string10 stringByAppendingString:@"&longitude="];
    NSString *string12 =  [string11 stringByAppendingString:lon_string];


    NSString *url1 = [NSString stringWithFormat:@"http://myserverside/mysql_up.php"];

    NSString *url =  [url1 stringByAppendingString:string12];



    return url;
}

编辑:

当textField中有空格时,似乎问题出现在nameAdded上(即MisterB没有崩溃,M先生是肯定的)。 但我正在使用:

nameAdded =[[nameField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

和NSLOg给出的nameAdded是Mister%20B。

崩溃仍然出现......

2 个答案:

答案 0 :(得分:2)

只需使用一个stringWithFormat:

- (NSString *)urlToUpload {
    NSString *url = [NSString stringWithFormat:@"http://myserverside/mysql_up.php?nombre=%@&horario=%@&info=%@&offerta=%@&latitude=%f&longitude=%f",
       [nameAdded stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
       [horarioAdded stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
       [infoAdded stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
       [offertaAdded stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
       locationToUpload2.latitude, locationToUpload2.longitude];

    return url;
}

确保引用的变量有效。

在原始代码中,不需要分配/初始化NSString,然后将另一个字符串分配给同一个变量。那是内存泄漏(string1)。

如果你真的想按照你的方式构建你的代码,至少使用NSMutableString并附加到那个可变字符串。创建十几个NSString变量是错误的方法。

已更新:确保添加到网址的每个字符串均已正确转义。

答案 1 :(得分:1)

看起来nameAdded可能是您遇到问题的原因。这点是否为零?

另外

  1. 您正在分配一个字符串,将其设置为string1,然后立即将string1设置为类函数stringWithFormat,它分配另一个字符串。你也在使用stringWithFormat,但你没有使用任何格式,所以你可以简单地使用NSString * string1 = @“?nombre =”;

  2. 您应该只使用NSMutableString并在一个变量中构建所有变量,而不是声明所有这些变量