1

我有一个对象 Foo ,它有一个 NSNumber 属性,声明如下:

@property (retain) NSNumber *siteID;

和@synthesized。

当我做这样的事情时:

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'

我担心我做错了什么并且错误地处理了这个任务,即使一切看起来都正常。

我知道 NSNumbers 是不可变的,并且我已经阅读了一些关于无法分配值的其他问题。如果存在涵盖此案例的现有主题,或者我只是缺少属性声明的基本内容,我们深表歉意。

感谢您的任何提示。

4

3 回答 3

1

非常感谢所有建议和后续问题。我觉得自己像个白痴,我有这样的错字,我声明的班级与分配的班级不同。这些课程非常相似。

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

使用实际非常长的类名更难发现错字 - 自动完成的危险没有发布有问题的确切代码并保留旧代码。

旧版本的类也有一个 siteID 属性。事情被新对象分配并用旧对象声明。再次 - 今天早上感觉很傻,但当我试图追查这个问题时,我真的很感谢大家的帮助。至少我有很好的直觉,总是注意警告:)。

于 2010-07-20T17:27:56.497 回答
0

也许这个属性引用的成员在声明中没有'*'?

编辑
setSiteID:在“.m”文件中有方法吗?

于 2010-07-19T21:54:26.727 回答
0

错误消息告诉您编译器认为方法 -setSiteId: 的参数是整数,而不是 NSNumber*。这可能意味着它在使用它的时候看不到该属性的声明。反过来,这可能意味着您省略了导入 Foo 类的头文件。

于 2010-07-20T08:54:15.657 回答