1

我有一個NavigationController一個簡單的測試應用程序,擴展的UINavigationController的UISearchBar,的UITableViewController和UINavigationController的,得到了​​SIGSEGV而執行本機代碼

[MonoTouch.Foundation.Register("NavigationController")] 
public class NavigationController : UINavigationController 
{ 
    public NavigationController (IntPtr handle) : base (handle) 
    { 

    } 

    [Export ("initWithCoder:")] 
    public NavigationController (NSCoder coder) : base (coder) 
    { 

    } 

    public NavigationController (UIViewController rootViewController) : base(rootViewController) 
    { 

    } 

    public override void ViewDidLoad() 
    { 
     base.ViewDidLoad(); 

     View.BackgroundColor = UIColor.Green; 
    } 
} 

我也有一個擴展的UITableViewController一個CustomersTableViewController(這裏來源是不是有影響) 。在ViewDidLoad方法中,我創建了一個UISearchBar,並將其添加到TableHeaderView中。

public class CustomersTableViewController : UITableViewController 
{ 
    UISearchBar _searchBar; 

    public CustomersTableViewController(UITableViewStyle style) : base(style) 
    { 
    } 

    public override void ViewDidLoad() 
    { 
     base.ViewDidLoad(); 

     _searchBar = CreateSearchBar(); 
     _searchBar.SearchButtonClicked += OnSearchBarSearchButtonClicked; 

     TableView.TableHeaderView = _searchBar; 

    } 

    void OnSearchBarSearchButtonClicked (object sender, EventArgs e) 
    { 

    } 

    static UISearchBar CreateSearchBar() 
    { 
     UISearchBar search = new UISearchBar(); 
     search.Placeholder = "Search Customers"; 
     search.SizeToFit(); 
     search.AutocorrectionType = UITextAutocorrectionType.No; 
     search.AutocapitalizationType = UITextAutocapitalizationType.None; 
     return search; 
    } 
} 

在Main.cs中,我運行以下代碼片段。如果我通過代碼或通過xib創建navigationController,它是一樣的。

// The name AppDelegate is referenced in the MainWindow.xib file. 
public partial class AppDelegate : UIApplicationDelegate 
{ 
    // This method is invoked when the application has loaded its UI and its ready to run 
    public override bool FinishedLaunching (UIApplication app, NSDictionary options) 
    { 
     // If you have defined a view, add it here: 
     //window.AddSubview (navigationController.View); 

     NavigationController navigationController = new NavigationController(new CustomersTableViewController(UITableViewStyle.Plain)); 
     window.AddSubview (navigationController.View); 

     window.MakeKeyAndVisible(); 

     return true; 
    } 
} 

圖形界面顯示正確,但是當我點擊searchBar應用程序崩潰時出現以下錯誤。

Stacktrace: 

at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication.UIApplicationMain (int,string[],intptr,intptr) <IL 0x0009f, 0xffffffff> 
at MonoTouch.UIKit.UIApplication.Main (string[],string,string) [0x00042] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:29 
at MonoTouch.UIKit.UIApplication.Main (string[]) [0x00000] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:34 
at TestSearchBar.Application.Main (string[]) [0x00000] in /Users/lorenzo/Projects/TestSearchBar/TestSearchBar/Main.cs:13 
at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <IL 0x00050, 0xffffffff> 

Native stacktrace: 

0 TestSearchBar      0x000d1e9c mono_handle_native_sigsegv + 343 
1 TestSearchBar      0x000100e0 mono_sigsegv_signal_handler + 322 
2 libSystem.B.dylib     0x9373205b _sigtramp + 43 
3 ???         0xffffffff 0x0 + 4294967295 
4 UIKit        0x01d73227 -[UITextField canBecomeFirstResponder] + 204 
5 UIKit        0x01da7226 -[UIResponder becomeFirstResponder] + 171 
6 UIKit        0x01f6f961 -[UITextInteractionAssistant setFirstResponderIfNecessary] + 208 
7 UIKit        0x01f725e2 -[UITextInteractionAssistant oneFingerTap:] + 1676 
8 UIKit        0x01f694f2 -[UIGestureRecognizer _updateGestureWithEvent:] + 730 
9 UIKit        0x01f654fe -[UIGestureRecognizer _delayedUpdateGesture] + 47 
10 UIKit        0x01f6bafc _UIGestureRecognizerUpdateObserver + 584 
11 UIKit        0x01f6bce1 _UIGestureRecognizerUpdateGesturesFromSendEvent + 51 
12 UIKit        0x01cff32a -[UIWindow _sendGesturesForEvent:] + 1292 
13 UIKit        0x01cfaca3 -[UIWindow sendEvent:] + 105 
14 UIKit        0x01cddc37 -[UIApplication sendEvent:] + 447 
15 UIKit        0x01ce2f2e _UIApplicationHandleEvent + 7576 
16 GraphicsServices     0x04053992 PurpleEventCallback + 1550 
17 CoreFoundation      0x00ea6944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52 
18 CoreFoundation      0x00e06cf7 __CFRunLoopDoSource1 + 215 
19 CoreFoundation      0x00e03f83 __CFRunLoopRun + 979 
20 CoreFoundation      0x00e03840 CFRunLoopRunSpecific + 208 
21 CoreFoundation      0x00e03761 CFRunLoopRunInMode + 97 
22 GraphicsServices     0x040521c4 GSEventRunModal + 217 
23 GraphicsServices     0x04052289 GSEventRun + 115 
24 UIKit        0x01ce6c93 UIApplicationMain + 1160 
25 ???         0x077f6764 0x0 + 125790052 
26 ???         0x077f6630 0x0 + 125789744 
27 ???         0x077f5f60 0x0 + 125788000 
28 ???         0x077f5eac 0x0 + 125787820 
29 ???         0x077f5f37 0x0 + 125787959 
30 TestSearchBar      0x0000fe9b mono_jit_runtime_invoke + 1332 
31 TestSearchBar      0x001ee961 mono_runtime_invoke + 137 
32 TestSearchBar      0x001f1048 mono_runtime_exec_main + 669 
33 TestSearchBar      0x001f0432 mono_runtime_run_main + 843 
34 TestSearchBar      0x000a3f9e mono_jit_exec + 200 
35 TestSearchBar      0x002a3d21 main + 3733 
36 TestSearchBar      0x00003179 _start + 208 
37 TestSearchBar      0x000030a8 start + 40 

================================================================= 
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. 
================================================================= 

有什麼建議嗎?這是MT錯誤嗎?我錯過了什麼嗎?先謝謝你。

編輯: 我使用單聲道2.10.4運行MT 4.2.2。 Mono 2.10.5的崩潰依然存在。

回答

1

更改:從一個局部變量到字段(這將保持基準,只要該類型的實例存在活着)(其中,因爲它是不再使用的GC能儘快收集)

NavigationController navigationController = new NavigationController(new CustomersTableViewController(UITableViewStyle.Plain)); 

。例如。

private NavigationController navigationController; 
    ... 

    navigationController = new NavigationController(new CustomersTableViewController(UITableViewStyle.Plain)); 

需要注意的是:

window.AddSubview (navigationController.View); 

將參考只保留到查看,而不是它的父(常見的錯誤)。

+0

它的工作原理!你知道如何修改UISearchBar的寬度嗎?使用前面的代碼,該條使用屏幕設備的總寬度。非常感謝你!! –

+0

我沒有嘗試上面的代碼,所以我沒有看到搜索欄。通過問一個新問題,你會得到更好的服務(更多的眼睛)。 – poupou

相關問題