【发布时间】:2013-12-05 22:34:30
【问题描述】:
编辑:正如人们在下面指出的那样,问题出在断言上。感谢您的帮助!
我有一个枚举集,我正在尝试等同,但由于某种原因它不起作用。 它的声明如下:
typedef NS_ENUM(NSUInteger, ExUnitTypes) {
kuNilWorkUnit,
kuDistanceInMeters,
//end
kuUndefined
};
我在这里使用它:
+(NSString*) ExUnitDescription: (ExUnitTypes) exUnit
{
if (exUnit == kuNilWorkUnit)
{
assert("error with units");
}
///.... more stuff
}
Xcode 没有触发我的断言。编辑:断言仅用于测试。我也使用过 NSLog。即使值显然是 kuNilWorkUnit,条件也不评估为 true。
有人对我做错了什么有任何建议或想法吗?
【问题讨论】:
-
您使用 assert 而不是 NSAssert 的任何原因?
-
触发断言的不是 Xcode。这是评估
false或0和assert()宏的条件。无论如何,字符串文字永远不会衰减为NULL指针,因此断言assert("arbitrary string literal here");永远不会触发。您现在需要阅读assert()的文档以了解问题所在以及如何解决。进一步推荐阅读的内容(仔细):man 3 abort、man 3 exit以及 C 语言中if语句的良好教程。 -
我只是使用断言来测试这个问题。我可以切换到 nsassert 或 NSLog 或其他。即使我的变量显然是 kuNilWorkUnit,条件也没有评估为真。
-
@ShravanSunder 条件确实评估为真。只是
"error with units"不会评估为 false。 -
是的,你们是对的。我不应该使用 assert()。谢谢!
标签: objective-c assert