2013-03-19 2 views
-3

Это похоже на действительно немой вопрос. Но все, что я пытаюсь сделать, это вычесть 1 из моего int.Вычитание 1 из int действует очень странно

int *subtractor = [[[NSUserDefaults standardUserDefaults]objectForKey:@"numberOfAlerts"] intValue]; 
    NSLog(@"%i", subtractor); 
    subtractor--; 
    NSLog(@"%d", subtractor); 
    NSNumber *savedNumber = [NSNumber numberWithInt:subtractor]; 
    [[NSUserDefaults standardUserDefaults]setObject:savedNumber forKey:@"numberOfAlerts"]; 
    [[NSUserDefaults standardUserDefaults]synchronize]; 

Консоль печатает:

1 -3

, когда он загружает информацию из дефолтов, его 1 это хорошо. Затем я пытаюсь вычесть 1, чтобы сделать его 0, но он идет до -3. Это так расстраивает! Любая помощь очень ценится!

Для записи

я изменить код вычитателя ++; и он должен был распечатать 12.

Но распечатано 15. Таким образом, он добавил четыре.

+0

Что вы делаете в вашем коде есть ** указатель арифметика **. Я не уверен, что это ваше намерение или нет, http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/BitOp/pointer.html –

+0

@MikeD Нет, это не мое намерение. Я просто хотел вычесть значение int. а не указатель. Однако ответ Дэвида Бака дает мне ошибку 'sigabrt'. Ты знаешь почему? Спасибо вам за помощь! –

+0

Код, который у вас есть, выглядит ОК. Единственное, о чем я могу думать, это первый NSLog, попробуйте @% d,% i не входит в список спецификаторов. Но я был бы удивлен, если бы это было так. К сожалению, сейчас я не рядом с Mac, поэтому я не могу запустить свой код для проверки. –

ответ

3

intValue возвращает int, а не указатель на int.

Вы должны объявить вычитатель как межд:

int subtractor = [[[NSUserDefaults standardUserDefaults]objectForKey:@"numberOfAlerts"] intValue]; 
2

Subtractor - это указатель на int, а код уменьшает указатель, а не int. Попробуйте (*subtractor)--

+0

Или 'int sub = [[[[[NSUserDefaults standardUserDefaults] objectForKey: @" numberOfAlerts "] intValue]' –

+0

@DavidBuck, который имеет общий смысл. Но когда я пытаюсь вычитать с помощью (* subtractor) -; он падает и дает мне ошибку 'sigabrt'! Спасибо за помощь! –

+0

Я нашел проблему. Я был полным N00B, и я использовал указатель для создания int. int * вычитатель ...; Спасибо за помощь всем! –

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