【发布时间】:2012-01-12 20:35:52
【问题描述】:
我有一个方法来构造一个发布请求。该请求可能有 x 个参数,但没有一个是强制性的。有布尔类型的参数(这些参数作为字符串传递,值为“true”或“false”(不是我的决定,它是一个 API)。
这就是问题所在。我的方法声明包含作为发布请求的一部分接受的所有参数。问题是如果布尔参数为真、假或不存在,请求会返回不同的结果。
我的方法 id 类似于
-(void) createRequestWithID:(NSString *)id translate(NSNumber *)translate onlyLastVersions:(NSNumber *)onlyLastVersions
我的方法是框架的一部分,将被其他开发人员使用和调用。这意味着,我无法控制它们传递给参数的内容,例如 translate 这是一个布尔值(我使用 NSNumber 作为包装器)。
问题来了。我需要能够确定该方法是否被称为将翻译为真、假或无。因为对于这些情况,我将请求作为 translate="true"、translate="false" 或 translate 将不存在于请求中。
我需要一种方法来区分真、假和无。
在 gbd 上进行测试以尝试找到一种区分它的方法:
(gdb) p translateFALSE $5 = (NSNumber *) 0x0
(gdb) p translateNIL $6 = (NSNumber *) 0x0
(gdb) po translateFALSE 无法打印 NIL 对象的描述。
(gdb) po translateNIL 无法打印 NIL 对象的描述。
(gdb) po [translateFALSE 类] 无法打印 NIL 对象的描述。
(gdb) po [translateNIL 类] 无法打印 NIL 对象的描述。
所以我看不出有什么办法。
【问题讨论】:
-
下面的所有三个答案都解释了如何做到这一点,我的给出了两个工作代码示例。您不能将对象设置为
false,这与将其设置为nil相同。您可以在调试输出中看到,对象指针指向 0x0 -- NULL。有关创建数字的信息,请参阅NSNumber的文档,但您必须创建如下数字:NSNumber* n = [NSNumber numberWithBool:NO];
标签: objective-c pointers boolean null