在我的应用中,我有一个用户必须填写表单的视图。但是,有时候应用程序崩溃,在这个函数中,那个简单的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。
崩溃仍然出现......
答案 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可能是您遇到问题的原因。这点是否为零?
另外
您正在分配一个字符串,将其设置为string1,然后立即将string1设置为类函数stringWithFormat,它分配另一个字符串。你也在使用stringWithFormat,但你没有使用任何格式,所以你可以简单地使用NSString * string1 = @“?nombre =”;
您应该只使用NSMutableString并在一个变量中构建所有变量,而不是声明所有这些变量