每次尝试设置模型对象中任何变量的值时,都会收到“发送到实例的无法识别的选择器”错误,并且应用程序崩溃。这些伊娃已经合成,它们不是只读的。我已经检查过设置的值是否正确。
我不确定它是否与IB中的某些连接有关,我已经检查了重新检查。
另外一点信息:我开始使用早期版本的Xcode进行开发,并使用相同的代码来处理该版本。
以下是确切的错误消息:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFString setDistance:]: unrecognized selector sent to instance 0x380ce50'
2009-11-10 15:10:58.113 CabMeter[7432:207] Stack: (
29303899,
2457931593,
29685819,
29255286,
29107906,
11415,
3140002,
3149770,
3199319,
3236748,
3170686,
3230561,
3179329,
12452,
3918761,
3933474,
4979284,
4987529,
3990121,
2838067,
2746396,
2773173,
37400273,
29088640,
29084744,
37394317,
37394514,
2777091,
9208,
9062
)
答案 0 :(得分:7)
ivars已经合成,它们不是只读的。
我认为您将实例变量与属性混淆。属性是您通常合成和/或只读的属性,它们通常(但不一定)由实例变量支持。
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFString setDistance:]: unrecognized selector sent to instance 0x380ce50'
这就是您应该阅读错误消息的原因。
您不将setDistance:
消息发送到您的模型对象 - 您将其发送到字符串。最有可能的是,你没有保留你应该拥有的模型对象,并且很快就会在相同的地址之后分配一个字符串。
查看the memory management rules并查找您未关注它们的位置。如果您的所有属性都设置正确,请确保您实际使用它们:常见的错误是直接分配给ivar:
myModel = [[[MyModel alloc] init] autorelease]
而不是通过财产:
<强> self.
强> myModel = [[[MyModel alloc] init] autorelease]
或
的 [self setMyModel:
强> [[[MyModel alloc] init] autorelease]
的 ]
强>
答案 1 :(得分:0)
'发送到实例的无法识别的选择器'听起来像你有一个委托,它定义了一个不存在的方法的选择器。
您的代码中是否有@selector(methodName)
?
在堆栈跟踪中,抛出异常之前调用的最后一个代码是什么?
如果它在setter方法上,我们能看到你如何声明实例变量以及如何合成它?