2013-01-05 57 views
0

我有一個應用程序加載DialogViewController。這包含幾個要素。其中一個要素是RootElement。此RootElement包含一個EntryElementiOS(Monotouch)應用程序崩潰在視圖上將出現

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)

感謝阿什...

回答

1

我有這個固定的自己。

我想這個問題是我在每次重新加載時都會替換根元素來刷新它。我修改了代碼:

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; 
    } 

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