iOS Неявное преобразование int в NSNumber запрещено с помощью ARC

в следующем коде я получаю сообщение об ошибке: Неявное преобразование «int» в «NSNumber *» запрещено с помощью ARC.

Что я делаю неправильно?

<pre>
 <code>
  NSDictionary *results = [jsonstring JSONValue];
  NSNumber *success = [results objectForKey:@"success"]; // possible values for "success": 0 or 1

   if (success == 1) { // ERROR implicit conversion of int to NSNumber disallowed with ARC    
   }
 </code>
</pre>

Спасибо за любую помощь или подсказку!

С уважением, Даниэль


person Daniel    schedule 18.05.2012    source источник


Ответы (4)


Вы должны использовать [success intValue] == 1. NSNumber — это класс, поэтому число — это указатель, а не прямое значение.

person Community    schedule 18.05.2012

Ошибка, потому что вы сравниваете NSNumber с int.

Попробуйте как -

if ([success isEqual:[NSNumber numberWithInt:1]])

or

if ([success intValue] == 1)
person rishi    schedule 18.05.2012
comment
Первое сравнение неверно, вы сравниваете значения указателей разных объектов. Вы бы хотели [success isEqual:[NSNumber numberWithInt:1]] или еще лучше, второе сравнение. - person DarkDust; 18.05.2012

NSNumber — это объект (то есть указатель), поэтому вы не можете просто сравнить его с целочисленным литералом, таким как 1. Вместо этого вам нужно извлечь значение int из числового объекта:

if ([success intValue] == 1) {
   ...
}
person omz    schedule 18.05.2012

Если success должно указывать логическое значение, вы можете попробовать это

NSDictionary *results = [jsonstring JSONValue];
NSNumber *success = [results objectForKey:@"success"]; 

if ([success boolValue]) { 
  // success!
}
person tilo    schedule 18.05.2012