Obj-C - NSString to int - PullRequest
       1

Obj-C - NSString to int

0 голосов
/ 12 мая 2011

Я делаю эту функцию, которая принимает строковый ввод, преобразует его в int и находит двоичный эквивалент.Он работал час назад, но после того, как я попытался поработать с другой клавиатурой, а затем вернулся назад, он больше не работает:

 - (void)convertToBinary:(NSString *)tf
    {
      NSString *result = @"";
      NSLog(@"-- %@", tf); //successfully prints
      [tf retain];
      if ([tf isKindOfClass:[NSString class]]){
        NSLog(@"tf is NSString"); //THIS PRINTS SO TF IS CONFIRMED TO BE NSSTRING
       }
      int dec = [tf intValue]; //BREAKS HERE...!

      if (!dec){
        [binaryOutput setText:@"Sorry, invalid input!"];
        } else {
              ...
        }

}

Я знаю, что для преобразования NSString в int мне просто нужносделать int dec = [someString intValue] пока что не работает.Я получаю ошибку: EXEC_BAD_ACCESS

Любая помощь, пожалуйста?

РЕДАКТИРОВАТЬ

Я только что сделал небольшой проект командной строки:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    // insert code here...
    NSString *t = @"123";
    int d = [t intValue];
    NSLog(@"Hello, %@", d);
    [pool drain];
    return 0;
}

и EXEC_BAD_ACCESS по-прежнему сохраняется для такой простой программы!В чем здесь проблема?

Ответы [ 4 ]

1 голос
/ 12 мая 2011

Вы должны использовать "% d" при печати целых чисел.Измените строку на:

NSLog(@"Hello, %d", d); 
1 голос
/ 12 мая 2011

Как edo42, это, вероятно, связано с пустой / освобожденной строкой. См. " EXC_BAD_ACCESS, полученный сигнал " для получения большой информации об этом сообщении об ошибке и о том, как отладить, используя NSZombieEnabled .

1 голос
/ 12 мая 2011

Instruments.app с инструментом Zombies может помочь раскрыть аварию.Также попробуйте запустить «Построить и проанализировать».

1 голос
/ 12 мая 2011

EXEC_BAD_ACCESS обычно срабатывает при утечке памяти, проверьте, что tf не ноль или не освобожден.Вы можете написать NSLog(@"%@", tf); в начале метода, чтобы проверить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...