iphone - iOS 三元条件运算符实现仅在设备上很挑剔?

标签 iphone ios ios-simulator ios-4.2 ternary-operator

我正在使用 iOS SDK 4.2。

我认为三元条件操作 (?) 在模拟器(iPhone4.1、4.2、iPad 3.2、4.2)上的实现方式与在实际设备上的实现方式不同。因为:

iPad ? xibName = @"MyViewController-iPad" : @"MyViewController";

在这些模拟器上运行完美,但在我的 iPhone 4 (4.1) 上失败

在这样写的时候:
xibName = (iPad) ? @"MyViewController-iPad" : @"MyViewController";

允许它在模拟器和设备上工作。

任何人都可以告诉为什么?这是一个错误吗? “第二版”更好吗,我应该总是那样写吗?

奇怪的是,编译器如何接受两者,而模拟器如何同时使用两者,但设备只接受一个……也许是苹果要检查的错误?

最佳答案

这些陈述并不等同。

// iPad ? xibName = @"MyViewController-iPad" : @"MyViewController";
if ( iPad ) {
    xibName = @"MyViewController-iPad";
} else {
    @"MyViewController"; // Effectively a NOP
}

// xibName = (iPad) ? @"MyViewController-iPad" : @"MyViewController";
if ( iPad ) {
    xibName = @"MyViewController-iPad";
} else {
    xibName = @"MyViewController";
}

对于 !iPad (比如,在 iPhone 4 上)第一个语句 xibName 根本不会被设置,我猜你只运行了 iPad 模拟器,而不是 iPhone。

关于iphone - iOS 三元条件运算符实现仅在设备上很挑剔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5205066/

相关文章:

ios - 在 ios dev Schema 中禁用 firestore

swift - 为什么 Calendar.current.firstWeekday == 2?

ios - UIImageView 图像未显示在 iPad 模拟器上

iphone - 对 uitableviewcell 背景颜色进行动画更改

ios - 仅按标准距离垂直/水平滑动

iOS Firebase 登录。选择 Google 帐户后显示事件指示器

ios - 为什么 Xcode 中缺少状态栏模拟指标?

ios - EXC_BAD_ACCESS(代码=1,地址=0x0)

iphone - Corebluetooth 中央管理器回调 didDiscoverPeripheral 两次

ios - 滚动时 UIScrollView 问题