Я уже отправил архив проекта в команду Xamarin, но они не смогли решить проблему.
Я уверен, что человек, назначенный для вашего делапридет с решением.Чем больше тестовый пример, тем больше времени это может занять.
При быстром просмотре в вашем AppDelegate.cs неверно:
PageTurnViewController viewController = new PageTurnViewController ("PageTurnViewController", null);
window.AddSubview (viewController.View);
, начиная с локального viewController
экземпляране будет никакой ссылки на него после того, как FinishedLaunching
вернется, и GC сможет его забрать.Однако это необходимо (на нативной стороне) для того, чтобы View
был полностью действителен.Это может привести к сбоям (могут быть и другие случаи, это первый и единственный файл, который я проверил сегодня утром).
Решение состоит в том, чтобы повысить viewController
до поля.Это сделает его alive
даже когда метод вернется, что сделает его недоступным для сбора.
ОБНОВЛЕНИЕ
Я быстро взглянул на ваш код на github.
Вы добавляете (под) вид, но никогда не удаляете их (когда GC удалит их, он не удалит их из супер-вида);
Вы теряете ссылки на представления, например, в PageDataSource.cs
newPageController = new BookPageController (nextPageIndex, parentController.currentPDFdocument, parentController);
return newPageController;
После первой страницы уже будет сохранена ссылка в newPageController
, которая будет перезаписанаи сделать объект коллекционной ошибки GC.Поскольку (под) представления никогда не удаляются, все равно могут быть ссылки на них, приводящие к сбоям.
Для отладки вы можете добавить свои собственные финализаторы, например,
~BookPageController ()
{
Console.WriteLine ("bu-bye");
}
и установить в них контрольные точки.Если они получают удар, а вы думаете, что он все еще используется, значит, вы, вероятно, обнаружили проблему.