Монотач 5.2.13
Я использую родную библиотеку ObjectiveC через привязки MonoTouch. Библиотека предоставляет контроллер представления. Все работает нормально, пока я не подклассифицирую контроллер представления. Затем я получаю ссылочные исключения NULL или часть пользовательского интерфейса не отображается.
Я читал о проблемах с инструментом btouch и опцией "-e". Но из того, что я вижу, варианта нет:
Выполнение инструмента /Developer/MonoTouch/usr/bin/btouch началось с аргументами: /d:DEBUG ApiDefinition.cs /s:StructsAndEnums.cs /tmpdir:obj/Debug/ios/ /sourceonly:obj/Debug/ios//sources. список
Подкласс (в этом примере) не добавляет никакой функциональности, но его использования достаточно, чтобы разорвать привязку:
// Works.
var contr = new NativeController();
// Fails with various errors. Throws a NULL reference exception about some UIPopoverController being NULL, for instance.
public class SubclassedController : NativeController
{
public SubclassedController() : base()
{
}
}
var contr = new SubclassedController();
Я понял, что добавление [NullAllowed] к свойству решило исключение ссылки NULL.
Собственный контроллер предоставляет свойство (nonatomic, strong) UIPopoverController *popoverController
. Это было связано как UIPopoverController PopoveController {get; set;}
- добавление NullAllowed
здесь решило проблему.
Но теперь я сталкиваюсь с проблемами, когда изображения не отображаются, и очевидных исключений нет.
Я предполагаю, что эти проблемы также возникают из-за того, что что-то равно NULL при использовании подклассовой версии, но собственный код, похоже, реагирует на NULL и изящно обрабатывает его.
Это приводит к трем вопросам:
- Почему поведение отличается при использовании подклассов? Что делает MonoTouch, чтобы это произошло? Почему я получаю NULL ref в случае использования производного класса? Я не касаюсь UIPopoverController в любом случае.
- Как я могу узнать, что не так и как это исправить, если ошибки нет?
- О чем еще нужно позаботиться, кроме NullAllowed?