2015-04-15 5 views
0

У меня есть строки кода, который создает NSString, как показано ниже,аварии на NSString stringWithFormat

NSString *paramString = [NSString stringWithFormat:@"?user_id=%@&x=%@&y=%@",_selectedID, _selectedX,[MyModel shared].currentUser.userID]; 

я получаю отчет об ошибке, как показано ниже:

crash in : 
Thread 0 crashed: 
libobjc.dylib  objc_msgSend + 16 
CoreFoundation _NSDescriptionWithLocaleFunc + 68 
CoreFoundation _CFStringAppendFormatCore + 6004 
CoreFoundation _CFStringCreateWithFormatAndArgumentsAux + 116 
Foundation [NSPlaceholderString initWithFormat:locale:arguments] + 160 

userID в CurrentUser является NSString. _selectdID и _selectedX - это оба NSStrings, переданные из VC1 -> VC2 ---> VC3. В VC2 и VC3 оба объявлены как @property(nonatomic,assign).

Однако этот сбой происходит только около 1% пользователей, и все они находятся на iOS 7.1.1 в соответствии с отчет о сбое.

Я попытался имитировать его без везения. Это из-за освобождения памяти? Есть ли что-нибудь, чтобы имитировать это?

+3

Вероятно, потому что '_selectedID' или' _selectedX' уже были освобождены при создании вашей строки. Почему вы объявили их как «назначать»? Вы должны объявить их «сильными», чтобы они не освобождались, когда вы все еще используете их. – dan

ответ

1

Попробуйте объявить свои свойства NSString с помощью копий или сильных модификаторов, чтобы обеспечить их память. Они могут быть освобождены, и их указатели ссылаются на другой var

1

Проблема в том, что она разыгрывается впоследствии. Пожалуйста, используйте ключевое слово strong, чтобы оно не было разыменовано.

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