在performSelectorOnMainThread:withObject:waitUntilDone中从不同大小的整数转换为指针

时间:2010-02-09 21:29:11

标签: iphone

我有:

 BOOL someBoolValue = ... //some code returning BOOL

当我尝试调用时:

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

我收到了警告:

  

从不同大小的整数

转换为指针

有关此的任何提示吗?

1 个答案:

答案 0 :(得分:5)

您正在传递一个“原始”布尔值,其中id(指向对象的指针)应为。

[self performSelectorOnMainThread: @selector(refreshView:) 
      withObject:someBoolValue 
      waitUntilDone:NO]

最好是

[self performSelectorOnMainThread:@selector(refreshView:) 
      withObject: [NSNumber numberWithBool: someBoolValue] 
      waitUntilDone: NO]

您可以通过将refreshView:方法发送到数字对象来提取boolValue方法中的布尔值:

if( [myWrappedBoolean boolValue] ) {
    ...
}

与Java或C#不同,Objective-C没有从原始值到对象的“自动装箱”。 BOOL类型只是一个小整数类型,它会导致您看到的错误消息,因为编译器需要指向performSelectorOnMainThread:withObject:waitUntilDone:的第二个参数的指针。