2014-09-02 3 views
1

Я работаю с iOS Designer, и у меня есть раскадровка с различными видами на ней (навигационный контроллер, ...). Почти у каждого вида есть красный восклицательный знак с правой стороны внизу. Я получаю сообщение об ошибке, какЗначение восклицательного знака в iOS Designer на Xamarin Studio

System.NullReferenceException
ссылки объект не указывает на экземпляр объекта

Если я иду к соответствующему строке кода:

public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations() 
{ 
    return TopViewController.GetSupportedInterfaceOrientations(); 
} 

Это часть моего CustomNavigationController. Если я задаю имя класса в iOS Designer, я получу ошибку. Что я должен добавить здесь? Конструктор выглядит следующим образом:

public CustomNavigationController (IntPtr handle) : base (handle) 
{ 
} 

Должен ли я создать его в AppDelegate?

На другом контроллере представления я получаю подобное исключение (с другой стек), и он указывает мне на этой линии:

this.NavigationController.NavigationBar.TintColor = UIColor.FromRGB (21, 66, 139); 

приложение, кажется, отлично работает на тренажере и на устройстве, хотя.

Как решить эту проблему?

EDIT:

теперь я удалил код в мой контроллер зрения:

this.NavigationController.NavigationBar.TintColor = UIColor.FromRGB (21, 66, 139); 

В качестве замены я переехал этот код в приложение делегата FinishedLaunching():

UINavigationBar.Appearance.TintColor = UIColor.FromRGB (21, 66, 139); 

Результат что теперь у меня нет восклицательного знака для этого контроллера вида, и цвет по желанию. Но предварительный просмотр в iOS Designer больше не показывает мне правильный цвет.

Если я прокомментировал GetSupportedInterfaceOrientations() в своем CustomNavigationController, то другой восклицательный знак был удален. Я думал, что мне нужна эта функция для определения ориентации каждого контроллера вида. Быстрый взгляд показал, что он работает.

ответ

1

Существует ограничение на то, что может поддерживать время разработки. Вы должны заменить любые динамические данные, например данные, загруженные из службы, фиктивными данными в режиме разработки. То же самое относится к объектам времени выполнения, таким как TopViewController, который доступен только во время выполнения.

if (Site != null && Site.DesignMode) 
{ 
    // use dummy data for designer surface 
} 
else 
{ 
    // use live data 
} 

Этот документ объясняет это более подробно:

http://developer.xamarin.com/guides/ios/user_interface/designer/ios_designable_controls_overview/

+0

Спасибо за информацию, я не знаю, что. Поэтому я должен добавить ориентацию по умолчанию в режиме разработки? Это также справедливо для доступа к 'this.NavigationController'? Я не знаю, почему я не могу получить доступ к контроллеру навигации. В iOS Designer в этом представлении отсутствует панель навигации. – testing

+0

Теперь я попытался использовать этот подход, но я все еще получаю 'System.NullReferenceException' в iOS Designer ...Вот код 'if (Site! = Null && Site.DesignMode) { return UIInterfaceOrientationMask.Portrait; } else { return TopViewController.GetSupportedInterfaceOrientations(); } ' – testing

+0

Я снова попробовал его со строкой. Я получаю 'UIViewControllerHierarchyInconsistency'. Такой подход не работает. – testing

Смежные вопросы