簡體   English   中英

iOS(Monotouch)應用在viewWillAppear崩潰

[英]iOS (Monotouch) App Crashes on viewWillAppear

我有一個加載DialogViewController的應用程序。 它包含幾個元素。 元素之一是RootElement 此RootElement包含一個EntryElement

viewDidAppear ,我從EntryElement ,並且entry元素中有一個值(即,我剛剛添加了該值),我想將該值用作視圖中的標題。

視圖是在父控制器中創建的:

    public TabBarController ()
    {
        root = new RootElement("My Budget");
        root.UnevenRows = true;

        tab1 = new TestController(root);

        nav = new UINavigationController(tab1);
        nav.Title = "Budget";

        var tabs = new UIViewController []{
            nav
        };

        ViewControllers = tabs;
        SelectedViewController = nav;
    }

然后在控制器中-[應該]發生魔術

    public override void ViewWillAppear (bool animated)
    {
        base.ViewWillAppear (animated);
        var caption = "Value..";

        if (BankElement != null && !String.IsNullOrWhiteSpace (BankElement.Value)){
            caption = BankElement.Value;
        }

        MyRoot = new RootElement ("Root");
        MyRoot.Caption = caption;
        BankElement = new EntryElement("Enter", caption, "");

        MyRoot.Add (new Section("") {BankElement});
        rootelement = new RootElement("Root");
        rootelement.Add (new Section("") {MyRoot});

        Root  = rootelement;
    }

但是,當viewDidAppear運行時,我可以進行堆棧跟蹤。 我不是每次都得到它-只是偶爾。

堆棧跟蹤:

  at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication.UIApplicationMain (int,string[],intptr,intptr) <IL 0x0009f, 0xffffffff>
  at MonoTouch.UIKit.UIApplication.Main (string[],string,string) [0x0004c] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38
  at BudgetPlanner.Application.Main (string[]) [0x00000] in /Users/Ashley/github/local/BudgetPlanner/BudgetPlanner/Main.cs:18
  at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <IL 0x00050, 0xffffffff>

本機堆棧跟蹤:

0   BudgetPlanner                       0x00095f7c mono_handle_native_sigsegv + 284
1   BudgetPlanner                       0x0000be98 mono_sigsegv_signal_handler + 248
2   libsystem_c.dylib                   0x908bd86b _sigtramp + 43
3   ???                                 0xffffffff 0x0 + 4294967295
4   UIKit                               0x028014d0 -[UITextField canResignFirstResponder] + 33
5   UIKit                               0x0284761f -[UIResponder resignFirstResponder] + 82
6   UIKit                               0x02801b36 -[UITextField resignFirstResponder] + 141
7   UIKit                               0x0277f517 -[UIView(Hierarchy) _removeFirstResponderFromSubtree] + 209
8   UIKit                               0x0277f873 __UIViewWillBeRemovedFromSuperview + 77
9   UIKit                               0x0277f783 -[UIView(Hierarchy) removeFromSuperview] + 70
10  UIKit                               0x029b73fe -[UINavigationTransitionView _cleanupTransition] + 103
11  UIKit                               0x029b7698 -[UINavigationTransitionView _navigationTransitionDidStop] + 55
12  UIKit                               0x027773b6 -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 237
13  UIKit                               0x02777554 -[UIViewAnimationState animationDidStop:finished:] + 68
14  QuartzCore                          0x04bc57d8 _ZN2CA5Layer23run_animation_callbacksEPv + 284
15  libdispatch.dylib                   0x04186014 _dispatch_client_callout + 14
16  libdispatch.dylib                   0x041767d5 _dispatch_main_queue_callback_4CF + 296
17  CoreFoundation                      0x012fcaf5 __CFRunLoopRun + 1925
18  CoreFoundation                      0x012fbf44 CFRunLoopRunSpecific + 276
19  CoreFoundation                      0x012fbe1b CFRunLoopRunInMode + 123
20  GraphicsServices                    0x04d237e3 GSEventRunModal + 88
21  GraphicsServices                    0x04d23668 GSEventRun + 104
22  UIKit                               0x0273965c UIApplicationMain + 1211
23  ???                                 0x0b4ee83c 0x0 + 189720636
24  ???                                 0x0b4eb0a0 0x0 + 189706400
25  ???                                 0x0b4ea7f8 0x0 + 189704184
26  ???                                 0x0b4ea903 0x0 + 189704451
27  BudgetPlanner                       0x00010252 mono_jit_runtime_invoke + 722
28  BudgetPlanner                       0x0017478e mono_runtime_invoke + 126
29  BudgetPlanner                       0x00178be4 mono_runtime_exec_main + 420
30  BudgetPlanner                       0x00178f55 mono_runtime_run_main + 725
31  BudgetPlanner                       0x0006ba65 mono_jit_exec + 149
32  BudgetPlanner                       0x0021f65d main + 2013
33  BudgetPlanner                       0x00003125 start + 53

=================================================================
Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries 
used by your application.
=================================================================

這是控制器的簡化版本-僅顯示了根視圖-在實際控制器中有很多數據。

關於這個例外有什么想法嗎? 現在真的開始讓我感到困惑。

(在模擬器上運行Monotouch 6.0.8)

謝謝阿什...

我自己已修復此問題。

我認為問題是我在每次重新加載時都替換了root元素以刷新它。 我修改了代碼:

    public override void ViewWillAppear (bool animated)
    {
        base.ViewWillAppear (animated);
        var caption = "Value..";

        if (BankElement != null && !String.IsNullOrWhiteSpace (BankElement.Value)) {
            caption = BankElement.Value;
        }

        if (MyRoot == null) {
            MyRoot = new RootElement ("Root");
            BankElement = new EntryElement("Enter", caption, "");
            MyRoot.Add (new Section("") {BankElement});
            rootelement = new RootElement("Root");
            rootelement.Add (new Section("") {MyRoot});

            Root  = rootelement;
        }


        MyRoot.Caption = caption;
    }

所以現在我只創建一個根元素並將其添加到控制器一次,然后更新它。 到目前為止看起來不錯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM