2010-10-13 5 views
0

Я получаю путать с тем, как обращаться с целыми числами в Objective C.Objective-C обработка целочисленные значения

Если я определяю следующие:

NSInteger i = 6; 
NSLog(@"%d", i); 

Я ожидаю, что это напечатать 6 к консоли.

Однако у меня есть NSInteger внутри объекта, который явно ссылается на указатель, поэтому я получаю очень разные результаты.

Например:

@interface Section : NSObject { 
NSInteger Id; 
} 

@property (nonatomic, assign) NSInteger Id; 

Пожалуйста, предположим, это был синтезирован в реализации.

Я создаю объект установить его значение и доступ к нему снова следующим образом:

Section *section = [[Section alloc] init]; 
section.Id = 6; 

NSMutableArray *sections = [[NSMutableArray alloc] init]; 
[sections addobject:section]; 

Section *sectionB = [setions objectAtIndex:0]; 
NSLog(@"%d", sectionB.Id); 

Это странный эффект печати адреса памяти то число, как 5447889. Почему я не могу просто получить значение?

Я попытался с помощью:

NSInteger sid = [[section Id]integerValue]; 

Но тогда я получаю предупреждение Недопустимый тип приемника NSInteger ' и иногда получаю ошибки программа получил сигнал: «EXC_BAD_ACCESS».

Мне очень хотелось бы знать, как обращаться с целыми числами или любыми значениями в этом отношении.

Большое спасибо

ответ

0

Думаю, я нашел ответ на свой вопрос. Установка значения NSInteger на значение, равное 6, является прекрасным.У меня есть проблема, я ставлю его значения, возвращенного из строки Json, используя следующие:

NSInteger i = [jsonResult objectForKey:@"Id"]; 

, которые должны быть:

NSInteger i = [[jsonResult objectForKey:@"Id"] integerValue]; 

Я не проверял это, но имеет смысл на основе того, что DarkDust сказал о integerValue, беря объект, а не Integer.

Спасибо за ваш вклад.

0

Похоже, вы обращаетесь неинициализированный памяти; 5447889 не похоже, что указатели на указатели обычно выравниваются по словам, а 5447889 не выравнивается по слову.

Возможно, вы можете вырезать и вставить ваш фактический код. Это опечатки, такие как addobject вместо addObject и setions вместо sections.

Это работает, если вы все упрощаете и делаете NSLog(@"%d", section.Id), чтобы пропустить messing с массивом?

+0

В настоящее время я не могу опубликовать полный код, потому что im далеко от моего mac. Я не знаю, что это помогает, но в моем производственном коде значение section.Id устанавливается из данных, обработанных json. Это может быть вопрос кастинга? Что касается числа, которое я опубликовал 5447889, это были лишь некоторые случайные номера примеров. – Chris

+0

Вы должны подтвердить значение, которое вы * устанавливаете * 'Id' для. –

0

Что касается странных значений, см. Ответ Доминика Куни.

Относительно EXC_BAD_ACCESS: [[section Id]integerValue]; не работает, потому что тогда он пытается интерпретировать NSInteger как объект и пытается отправить ему сообщение integerValue, которое не может работать. Это целое число, а не объект.

+0

+1. Отличное объяснение. –

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