iOS троичного условного оператора реализация привередлива только на устройстве? - PullRequest
1 голос
/ 05 марта 2011

Я использую 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";

позволяет работать наи симуляторы, и устройство.

Кто-нибудь может сказать, почему?Это ошибка?«2-я версия» лучше, и я всегда должен писать таким образом?

Странно, как компилятор принимает оба, и симуляторы работают с обоими, но устройство принимает только один ... возможно, ошибка для Apple, чтобы проверить?

1 Ответ

10 голосов
/ 05 марта 2011

Эти утверждения не эквивалентны.

// 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.

...