2013-05-30 2 views
0

В моем приложении у меня есть вид, где пользователь должен заполнить форму. Но, где-то приложение авария здесь, в этой функции, что простая cacth поле значения и построил URL, чтобы датьiphone - авария приложения в форме

-(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; 
} 

EDIT:

кажется проблема appers на nameAdded, когда есть белое пространство в textField (т.е. MisterB не сбой, Mister B да). Но я использую:

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

и NSLog отдать nameAdded это Mister% 20В.

Аварии продолжает появляться ...

+0

Существует очень много неправильного с этим кодом из того, что я вижу, но мое первое предположение о том, что не так, будет «nameAdded» в строке, которая сбой. Это свойство? – rooster117

+2

См. Http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1 – rmaddy

+0

спасибо maddy, я не знаю этого учебника. – doxsi

ответ

1

Похоже nameAdded может быть причиной ваших проблем. Это ноль в этот момент?

Также

  1. Вы выделяем строку, установив его в string1, а затем сразу же установка строку1 к функции stringWithFormat класса, который выделяет еще одну строку. Также вы используете stringWithFormat, но вы не используете какой-либо формат, чтобы просто использовать NSString * string1 = @ "? Nombre =";

  2. Вместо того, чтобы объявить всех этих переменных следует использовать только NSMutableString и построить все это в одном variabl

+0

NSMutableString требуется только тогда, когда вы хотите изменить строку, например, вставить/удалить символ. 'NSString * s = @" первый элемент ";", а затем просто 's = [s stringAppendingString: @" xyz "];' и 's = [s stringByAppendigFormat: @"% f ", var];' работает очень хорошо , –

+0

@ ott-- Использование 'NSMutableString' для добавления большого количества фрагментов намного эффективнее, чем добавление кучи неизменяемых строк в отдельные переменные. – rmaddy

+0

@maddy Как вы показали в своем ответе, использование только одного NSString еще более эффективно - ему не нужен собственный метод. –

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-адрес, экранирована надлежащим образом.

+0

+1 для более сжатого кода; но если OP использует ARC, тогда компилятор должен вставлять 'release' в' string1' после первого alloc/init. Быстрый тест с разборкой предполагает, что это так. – FluffulousChimp

+0

@NSBum Поскольку код OP имеет вызовы 'autorelease', мы знаем, что ARC не используется. – rmaddy

+0

oops - не прокручивался достаточно далеко, чтобы видеть вызовы 'autorelease'. Благодарю. – FluffulousChimp

Смежные вопросы