Не удается получить поддерживаемый массив ориентаций интерфейса, почему? - PullRequest
1 голос
/ 03 декабря 2011

В этом блоке кода:

   NSArray *supportedOrientations = nil;
   if( iPhone ) { // bool
        supportedOrientations = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"UISupportedInterfaceOrientations"];
        // one array element
   }
   else if( iPad ) { // bool
        supportedOrientations = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"UISupportedInterfaceOrientations~ipad"];
        // returns nil
   }
   else {
        NSLog(@"%@:%@ device type not identified", kClassName, kMethodName);
   }

Если устройством является iPhone, то поддерживаемые ориентации имеют массив.

Если это iPad, поддерживаемые ориентации - ноль.

Файл всегда найден, поэтому NSLog никогда не отображается (подтверждается пошаговым выполнением отладчика).

При проверке списка с редактированием текста я вижу:

    <key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
    </array>
    <key>UISupportedInterfaceOrientations~ipad</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationPortraitUpsideDown</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>

Есть идеи, почему это происходит?

Запуск в симуляторах iOS версии 4.3.

1 Ответ

11 голосов
/ 04 декабря 2011

Когда пакет загружает свои infoDictionary, он проверяет каждый ключ в словаре.Если ключ относится к конкретному устройству, комплект проверяет, относится ли ключ к текущему устройству.

  • Если ключ относится к текущему устройству, комплект удаляет специфичную для устройства частьключ.Например, на iPad пакет меняется UISupportedInterfaceOrientations~iPad на UISupportedInterfaceOrientations.

  • Если ключ относится к другому устройству, пакет удаляет ключ из словаря.Например, на iPhone пакет удаляет ключ UISupportedInterfaceOrientations~iPad из словаря.

Так что вы можете просто сделать это:

NSArray *supportedOrientations = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"UISupportedInterfaceOrientations"];

Это будет делатьправильная вещь на всех устройствах.

Вы можете сделать это вместо этого, и это немного короче:

NSArray *supportedOrientations = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UISupportedInterfaceOrientations"];
...