2011-03-05 76 views
1

我正在使用iOS SDK 4.2。iOS三态条件运算符实现仅在设备上挑剔吗?

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

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

可以完美运行这些模拟器,但无法在我的iPhone 4(4.1)

在写这篇方式:

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

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

任何人都可以说出原因?这是一个错误吗?是“第二版”更好,我应该总是这样写?

很奇怪编译器如何同时接受和模拟器都可以同时使用,但设备只接受一个......也许是一个苹果检查出错误?

回答

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。

+0

正如我写我DID跑了下面的模拟人生:iPad 3.2,iPad 4.2,iPhone 4.1,iPhone 4.2。它在每种情况下正确加载xib。我知道我最初的代码有点不正确,我感谢你的解释(它清楚地说明了“if to translation”)。无论如何,这是很有趣的模拟人如何评估“正确”的代码和设备没有 – xfze 2011-03-05 19:18:31