任何解决此问题的方法?将NSNumber *传递给NSString *期望参数不会导致编译器警告/错误
我改变了我的一个函数的签名来传递NSString对象,而不是NSNumber对象。除了我有一些仍然通过旧的NSNumber对象的实例。很难追查,因为编译器不会显示任何错误或警告。我试图删除DerivedData文件夹。没有帮助。
我也试过做分析,也没有发现那些问题。
我知道我可以做一个NSAssert检查,以确保传入的参数类型是正确的,但这似乎是倒退。这应该是编译器拿起并警告我的东西。
有什么建议吗?
- (void) test:(NSString *)par;
调用
NSString *str = (NSString *)[array objectAtIndex:0];
除非对象是NSNumber的,所以在技术上它转换一个NSNumber到的NSString。调试器将其视为NSNumber,所以不知道为什么它首先被允许。
你可以做的事情不多,除非学习在需要的地方更防守地编码。当你明确表演时,你必须确保它能奏效。 –
是否没有可以设置调试这些不良类型的断点? – David
@David - 如果你明确地指定了一个像这样的指针,那么它就是游戏结束了。编译器如何告诉你没有*意味着*要做到这一点?它不知道阵列中的内容 - 您必须自己维护这些信息。 –