我正在使用 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/