无法在字典中存储int或double

jar*_*ryd 14 objective-c

当尝试在字典中存储double或int时,我收到错误

错误:语义问题:向不兼容类型'id'的参数发送'double'

我有以下代码

[data setValue:longitude forKey:@"longitude"];
Run Code Online (Sandbox Code Playgroud)

经度是双倍的.

我应该怎么存储这个?我应该只创建一个指向int或double的指针吗?

Kon*_*ess 22

正如其他帖子所述,您需要使用a NSNumber来包装对象中的double值.这样做的原因是所有Cocoa基础集合类都设计为使用对象而不是原始值.正如你的建议,通过一些工作,你实际上可以传递一个指向double值的指针(我想,如果你设法将它作为一个id类型指针强制转换),但是一旦你的方法完成并且double超出了范围,它就会被释放,你的指针现在指向垃圾.对于一个对象,集合(NSDictionary在这种情况下)将在添加对象时保留对象,并在删除对象时将其释放,或者在集合被删除时释放它dealloc,确保您的价值能够存活直到您不再需要它为止.

我会这样做: 哪个将使您的NSNumber对象只有+1引用计数(保留它的字典)并且没有自动释放
NSNumber *tempNumber = [[NSNumber alloc] initWithDouble:longitude];
[data setValue:tempNumber forKey:@"longitude"];
[tempNumber release];

另一个建议的做法:
[data setValue:[NSNumber numberWithDouble: longitude] forKey:@"longitude"];
也可以正常工作但你的对象最终会得到+1引用计数和numberWithDouble方法的自动释放.在可能的情况下,我尽量避免自动释放,但代码更简洁.因人而异.


Cam*_*ron 6

尝试使用NSNumber:

[data setValue:[NSNumber numberWithDouble: longitude] forKey:@"longitude"];