传递布尔对象NO总是导致YES

时间:2014-08-07 18:33:53

标签: objective-c ios7

我试图通过选择器传递一个布尔对象。但是,即使我发送NO(Xcode 5 iOS 7),结果总是等于YES。

[self performSelectorOnMainThread:@selector(clearMessageElements:) withObject:@NO waitUntilDone:NO];


-(void)clearMessageElements:(BOOL)resetLastUpdate

如果我在clearMessageElements的第一行放置一个断点,然后查看resetLastUpdate,尽管在上面的调用中传递了NO,结果仍然是YES。

更新

我赞赏下面发送的回复。但是,我仍然有一个问题,虽然现在有点不同。 boolValue确实会正确解释,但不会在通知中调用该方法。所以扩展:

[[NSNotificationCenter defaultCenter]addObserver:self
                                            selector:@selector(clearMessageElements:)
                                                name:@"appResigning"
                                              object:@YES];


-(void)clearMessageElements:(NSNumber *)resetLastUpdate
{
    NSLog(@"%hhd",[resetLastUpdate boolValue]);
}

clearMessageElements现在可以使用我在这个问题顶部写的原始调用,但在NSSNotification中使用时,这种方法根本不会调用该方法。但是,如果我删除@YES并用NIL替换它将执行该函数。所以我知道正在发送通知,但是在这里使用@YES的一些事情是阻止它执行该方法。

2 个答案:

答案 0 :(得分:5)

这是正确的方法,但@NO不是BOOL,而是NSNumberboolValue为NO。

答案 1 :(得分:2)

将Bool转换为@jbandes指向的对象。

NSNumber *value = [[NSNumber alloc] initWithBool:NO];
[self performSelectorOnMainThread:@selector(clearMessageElements:) withObject:value waitUntilDone:NO];

-(void)clearMessageElements:(id)resetLastUpdate{

BOOL myboolean = [((NSNumber *)resetLastUpdate) boolValue];


}