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

Jak*_*kub 1 iphone

我有:

 BOOL someBoolValue = ... //some code returning BOOL
Run Code Online (Sandbox Code Playgroud)

当我尝试调用时:

[self performSelectorOnMainThread:@selector(refreshView:) withObject:someBoolValue waitUntilDone:NO];
Run Code Online (Sandbox Code Playgroud)

我收到警告:

从不同大小的整数转换为指针

有什么暗示吗?

Dir*_*irk 5

您正在传递一个"原始"布尔值,其中id(指向对象的指针)应该是.

[self performSelectorOnMainThread: @selector(refreshView:) 
      withObject:someBoolValue 
      waitUntilDone:NO]
Run Code Online (Sandbox Code Playgroud)

应该更好

[self performSelectorOnMainThread:@selector(refreshView:) 
      withObject: [NSNumber numberWithBool: someBoolValue] 
      waitUntilDone: NO]
Run Code Online (Sandbox Code Playgroud)

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

if( [myWrappedBoolean boolValue] ) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

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