У меня возникла проблема, когда мое приложение Monotouch иногда сбой сразу после получения предупреждения о памяти. См. Ниже трассировку стека.
Received memory warning. Level=2 DTMobileIS[2299] : _memoryNotification : { OSMemoryNotificationLevel = 2; timestamp = "2011-04-11 14:29:09 +0000"; } Toplevel exception: System.MissingMethodException: No constructor found for Myapp.UI.BoardController::.ctor(System.IntPtr) at System.Activator.CreateInstance (System.Type type, BindingFlags bindingAttr, System.Reflection.Binder binder, System.Object[] args, System.Globalization.CultureInfo culture, System.Object[] activationAttributes) [0x00000] in :0 at System.Activator.CreateInstance (System.Type type, System.Object[] args, System.Object[] activationAttributes) [0x00000] in :0 at System.Activator.CreateInstance (System.Type type, System.Object[] args) [0x00000] in :0 at MonoTouch.ObjCRuntime.Runtime.ConstructNSObject (IntPtr ptr, IntPtr klass) [0x00000] in :0 at MonoTouch.ObjCRuntime.Runtime.GetNSObject (IntPtr ptr) [0x00000] in :0 at MonoTouch.ObjCRuntime.Runtime.GetNSObjectWrapped (IntPtr ptr) [0x00000] in :0 at (wrapper native-to-managed) MonoTouch.ObjCRuntime.Runtime:GetNSObjectWrapped (intptr) at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x00000] in :0 at Myapp.Free.Application.Main (System.String[] args) [0x00000] in /Users/haakon/Code/Myapp-work/iOS/Myapp.Free/Myapp.Free/Main.cs:12
Трассировка стека правильна тем, что указанный класс (BoardController, который является подклассом UIViewController) не имеет конструктора, принимающего параметр IntPtr. Но это намеренно, поскольку я вообще не использую Interface Builder в своем приложении. Так почему это происходит?
Я нашел аналогичный вопрос, который, казалось, предполагал, что это может произойти, если вы позволите вашим представлениям (или, возможно, просматривать контроллеры) стать собранными мусором. Но я не понимаю, как это может произойти здесь. Некоторая предыстория: мой делегат приложения имеет сильную ссылку на контроллер навигации, который, в свою очередь, содержит сильную ссылку на контроллер корневого представления в стеке навигации. Этот контроллер корневого представления также содержит сильную ссылку на экземпляр BoardController. Поэтому я не понимаю, как возможно, что BoardController получает сбор мусора.
Любые идеи?