0

在我的应用程序中,我有一个用户必须填写表格的视图。但是,有时应用程序在这里崩溃,在这个函数中,那个简单的 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 没有崩溃,B 先生是的)。但我正在使用:

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

NSLOg 给出的 nameAdded 是 Mister%20B。

崩溃仍然出现...

4

2 回答 2

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变量是错误的方法。

更新:确保添加到 URL 的每个字符串都正确转义。

于 2013-05-30T23:13:18.353 回答
1

看起来 nameAdded 可能是您的问题的原因。那个时候是零吗?

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

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

于 2013-05-30T23:09:08.580 回答