我正在使用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";
允许它在模拟器和设备上工作。
任何人都可以说出原因?这是一个错误吗? “第二版”是否更好,我应该一直这样写?
奇怪的是编译器如何接受这两者并且模拟器与两者兼容但是设备只接受一个...也许苹果要查看的错误?
答案 0 :(得分:10)
这些陈述并不等同。
// 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。