【发布时间】:2011-08-25 16:33:56
【问题描述】:
有什么办法可以解决这个问题吗?
我更改了函数的签名以传递 NSString 对象而不是 NSNumber 对象。除了我有一些实例仍然通过旧的 NSNumber 对象。很难追踪,因为编译器不会为此显示任何错误或警告。我尝试删除 DerivedData 文件夹。没用。
我也尝试过分析,也没有发现这些问题。
我知道我可以进行 NSAssert 检查以确保传入的参数类型正确,但这似乎是倒退的。这应该是编译器发现并警告我的东西。
有什么建议吗?
- (void) test:(NSString *)par;
打电话
NSString *str = (NSString *)[array objectAtIndex:0];
除了对象是 NSNumber,所以从技术上讲,它会将 NSNumber 转换为 NSString。调试器将其视为 NSNumber,因此不确定为什么首先允许它。
【问题讨论】:
-
除了在需要的地方学习更具防御性的编码外,您对此无能为力。当您明确地转换为某些东西时,您必须确保它会起作用。
-
没有我可以设置的断点来调试这些类型的错误类型吗?
-
@David - 如果你明确地对这样的指针进行类型转换,那么游戏就结束了。编译器怎么能告诉你不是意思这样做的?它不知道数组中有什么——你必须自己维护这些信息。
-
您可以将 Xcode 设置为在 ObjC 异常上中断,例如在这种情况下,当调用无法识别的选择器时 - 就是这样。对于运行时的 ObjC,在大多数情况下,对象的类型基本上无关紧要,只要它支持在其上调用选择器即可。
标签: objective-c debugging xcode4