Как создать IBOutlet только для iPAD в общем UIViewController - универсальном приложении - PullRequest
1 голос
/ 01 ноября 2011

У меня есть 2 xibs, один для iPad и один для iPhone. Тем не менее, в настоящее время у меня есть только один контроллер представления для этих двух XIB, который работает как для iPhone, так и для iPad.

Внутри iPad Xib у меня есть IBOutlet, который не принадлежит iPhone Xib. Как мне определить эту точку? Я замечаю, что если я добавлю в свой метод deallc что-то вроде этого:

-(void) dealloc
{
    [outletOnlyForIpad release]
}

Приложение вылетает на iPhone. Видимо, потому что это не очень хорошо работает на iPhone. (Я надеялся, что это останется нулем, но это не так)

Я не нашел ни одного макроса препроцессора, который мог бы использовать, поэтому я могу объявить этот Outlet только для iPad. Единственный способ сделать это - проверить в runTime что-то вроде:

isIpad()
[outletOnlyForIpad SomeMethodOnTheOutlet]

В каждом месте моего контроллера?

Ответы [ 4 ]

0 голосов
/ 01 ноября 2011

в вашем резерве, чтобы избежать сбоя на iPhone, и подключите IBOutlet как обычно в iPad xib:

-(void) dealloc
{
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        [outletOnlyForIpad release]
    }
}
0 голосов
/ 01 ноября 2011

Когда вы инициализируете свой класс, все переменные экземпляра автоматически обнуляются. Таким образом, это эквивалент добавления:

outletOnlyForIpad = nil;

К вашему init методу.

Это значение nil будет перезаписано, когда представление загружается для iPad, но не для iPhone (если у вас нет другого кода, который его устанавливает). Однако ваш сбой [outletOnlyForIpad release] показывает, что outletOnlyForIpad не является nil на данный момент, что означает, что что-то дало ему значение. Вам нужно выяснить, что это за нечто - это может быть файл вашего конструктора интерфейса.

0 голосов
/ 01 ноября 2011

Ваш код правильный.Эта точка должна оставаться на nil, поэтому отправка сообщения release должна быть безвредной.Вместо того, чтобы обойти ошибку, я предлагаю вам проверить, где установлена ​​эта розетка, и устранить причину проблемы.Вы уверены, что ничего не подключаете к нему в наконечнике iPhone?

0 голосов
/ 01 ноября 2011

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

Если я создаю приложение с разными элементами управления на разных устройствах, я склонен создавать их программно, чтобыИзбегайте проблем с подключением, таких как этот.

...