ios - iOS8 中 iOS 模拟器和设备之间 NSNumber 到 BOOL 的不同结果

标签 ios objective-c ios8 boolean nsnumber

当我尝试通过 iOS 模拟器(8.1 和 7.1)运行以下代码时,myMethod 中“going”的值为 YES。

但是当我用我的iPhone(8.1.2)运行时,going的值就变成了NO。

[self performSelector:@selector(myMethod:) withObject:[NSNumber numberWithBool:YES]  afterDelay:0.5f];

- (void) myMethod:(BOOL)going {

  if (going) {
     // do something
  }
  else {
     // do another thing
  }
}

我找不到导致不同结果的根本原因。

有人可以帮忙吗?谢谢

最佳答案

myMethod: 采用 BOOL。不是 NSNumber。您需要以下内容:

[self performSelector:@selector(myMethod:) withObject:@YES afterDelay:0.5f];

- (void)myMethod:(NSNumber *)going {
    if ([going boolValue]) {
       // do something
    } else {
       // do another thing
    }
}

另一种选择是使用 dispatch_after 而不是 performSelector:withObject:afterDelay:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    [self myMethod:YES];
});

- (void)myMethod:(BOOL)going {
    if (going) {
       // do something
    } else {
       // do another thing
    }
}

关于ios - iOS8 中 iOS 模拟器和设备之间 NSNumber 到 BOOL 的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27832654/

相关文章:

ios - 更新 Xcode 7 后,Facebook sdk 不是 dylib 错误吗?

ios - CLLocation Manager 委托(delegate)问题

ios - Swift Closure 中的可选链接,其中返回类型必须为 Void

objective-c - 在 XCode 6 中找不到 sockaddr_in(在 OS X 10.10 Yosemite 上)

iphone - 如何对齐 UIAlertView 中的消息?

swift - IBDesignable 和 UITableViewCell

iOS 8 只有内存泄漏与 UIAlertController 或 UIActionSheet

ios - 在我的应用程序中创建游戏初始教程

ios - 将字符串值转换为 URL 值

javascript - 如何在plugin.xml中添加同名不同文件夹的资源?