В Objective-C важно различать объекты и примитивные типы.
Объект всегда хранится в виде указателя, который является местоположением объекта в памяти. Указатель — это просто число. С помощью NSLog
вы можете использовать %p
, чтобы увидеть это значение. Вы также можете отобразить его в отладчике, например: print myObject
. Указатель отображается как шестнадцатеричное число с префиксом 0x
. nil
по сути является нулевым местоположением (0x0000
). Когда вы выделяете объект любого типа, вы получаете указатель, который не равен нулю. Когда вы присваиваете объект переменной, вы просто копируете адрес памяти, а не дублируете объект. С помощью NSLog
вы можете использовать %@
для распечатки description
объекта. В отладчике вот так: print-object myObject
.
Примитивные типы, такие как NSInteger
, не являются объектами. Вместо сохранения указателя обычно вы просто сохраняете значение. Когда вы назначаете переменную NSInteger
, вы делаете копию значения. Вы можете увидеть значение в отладчике, используя print
. Или вот так: NSLog("%ld", (long)currentRow)
. Когда вы назначаете примитив, вы копируете его значение. Не используйте %@
или print-object
с примитивами — они ожидают объекты.
(Я говорю «обычно вы просто сохраняете значение», потому что вы также можете создавать указатели на примитивные типы. Однако в таких ситуациях, как ваша, это не обязательно.)
[self currentRow]
возвращает 0, как вы и установили. (Более того, поскольку Objective-C гарантирует инициализацию переменных экземпляра, он вернет 0, даже если вы не установили его.)
Проблема в том, что вы ожидаете указатель на объект. То, как вы исправляете свой код, зависит от того, как вы его используете:
- Если вы используете
print-object currentRow
, измените его на print currentRow
.
- Если вы используете
NSLog("%@", currentRow)
, измените его на NSLog(%"ld", (long)currentRow)
.
- Если вы используете
currentRow
где-то еще, где требуется объект, измените переменную экземпляра и типы свойств на NSNumber *
, тип объекта. Установите его с помощью [self setCurrentRow:[NSNumber numberWithInt:0]]
.
person
paulmelnikow
schedule
10.10.2011