NSNumber Предупреждение при использовании сеттера, но кажется, что код работает нормально - передача аргумента 1 делает целое число из указателя без приведения - PullRequest
1 голос
/ 20 июля 2010

У меня есть объект Foo, который имеет свойство NSNumber, которое объявлено так:

@property (retain) NSNumber *siteID;

и @ синтезированы.

Когда я делаю что-то вроде этого:

Foo *myFoo = [[Foo alloc] init];
NSNumber *newNumber = [[NSNumber alloc] initWithInt:42];
myFoo.siteID = newNumber;
[newNumber release];

Задание в строке 3, которое проходит через синтезированный установщик, кажется, работает просто отлично - myFoo.siteID имеет значение, которое я ожидаю, я могу заниматься своими делами. Однако я получаю предупреждение:

Passing argument 1 of 'setSiteID: makes integer from pointer without a cast'

Я обеспокоен, что делаю что-то не так и неправильно выполняю это задание, даже если кажется, что все работает нормально.

Я понимаю, что номера NSN являются неизменяемыми, и я прочитал некоторые другие вопросы о невозможности присвоить значение. Извиняюсь, если есть существующая тема, которая покрывает этот случай, или если я просто пропускаю что-то простое с объявлением свойства.

Спасибо за любые советы.

Ответы [ 3 ]

1 голос
/ 20 июля 2010

Действительно ценю все предложения и дополнительные вопросы. Я чувствую себя идиотом, у меня была такая опечатка, где я декларировал с другим классом, чем я говорил. Эти классы были очень похожи.

oldFoo * myFoo = [[Foo alloc] init];

Typo было сложнее определить с помощью очень длинного имени класса - опасности автозаполнения, когда они не публикуют точный код, о котором идет речь, и сохраняют старый код.

Старая версия класса также имела свойство siteID. Вещи были распределены с новым объектом и объявлены со старым. Снова - чувствую себя глупо этим утром, но искренне ценю помощь всех, когда я пытался отследить это. По крайней мере, у меня есть хороший инстинкт, чтобы всегда учитывать предупреждения:).

0 голосов
/ 20 июля 2010

В сообщении об ошибке сообщается, что компилятор считает параметр метода -setSiteId: целым числом, а не NSNumber *. Это, вероятно, означает, что он не может видеть объявление свойства в том месте, где он его использует. Это, в свою очередь, вероятно означает, что вы исключили импорт файла заголовка для класса Foo.

0 голосов
/ 20 июля 2010

Может быть, элемент, на который ссылается это свойство, не имеет '*' в декларации?

EDIT :У вас есть метод setSiteID: в файле ".m"?

...