我试图通过选择器传递一个布尔对象。但是,即使我发送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的一些事情是阻止它执行该方法。
答案 0 :(得分:5)
这是正确的方法,但@NO
不是BOOL
,而是NSNumber
,boolValue
为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];
}