上次更新后NavigationItem RightBarButtonItem有问题

如何解决上次更新后NavigationItem RightBarButtonItem有问题

| 在上次更新(4.0.0)之后,我遇到了一个问题,想知道这是一个错误,并且有修复程序。 从下面的代码中可以看到,我正在创建NavigationItem.RightBarButtonItem并将委托添加到TouchUpInside事件。该按钮已创建,但是当发生触摸时,该应用程序将严重死机(请参阅下文)。在此更新之前,代码运行良好。 有人知道吗? Monotouch团队,您知道这个问题吗?也许我只是编码不正确并且曾经工作过,但是新的更新证明我编码不正确。 问候, 丹尼 码
        //start by creating the view
        RectangleF f = new RectangleF(0f,0f,38f,38f);
        UIView v = new UIView(f);

        //Now create a button with a background
        UIButton b = new UIButton(f);
        b.SetBackgroundImage(UIImage.FromFile(\"Images/Common/info.png\"),UIControlState.normal);

        //add the button to the view
        v.Add(b);
        b.TouchUpInside
        //give teh button a delegate action
        b.TouchUpInside += delegate {
            //var vc3 = new iPhone_HomeView();
            //var vc3 = new iPhone_RetardView();
            //vc3.Title = \"asdasd\";

            //this.NavigationController.PushViewController (vc3,true);
        };

        //Now apply the view to the navigation bar on the right
            NavigationItem.RightBarButtonItem = new UIBarButtonItem(v);
            NavigationItem.RightBarButtonItem.Width = 38f;
错误 堆栈跟踪: 在(包装器托管到本地)MonoTouch.UIKit.UIApplication.UIApplicationMain(int,string [],intptr,intptr)   在/Users/plasma/Source/iphone/monotouch/UIKit/UIApplication.cs:26中的MonoTouch.UIKit.UIApplication.Main(string [],string,string)[0x00038]   在/Users/plasma/Source/iphone/monotouch/UIKit/UIApplication.cs:31中的MonoTouch.UIKit.UIApplication.Main(string [])[0x00000]   在/Users/aprdev/Projects/SmartPhonesolution/SmartPhonesolution/Main.cs:15中的SmartPhonesolution.Application.Main(string [])[0x00000]   在(包装运行时调用).runtime_invoke_void_object(object,intptr,intptr,intptr) 本机堆栈跟踪:
0   SmartPhonesolution1                 0x000d0db5 mono_handle_native_sigsegv + 343
1   SmartPhonesolution1                 0x0000f80c mono_sigsegv_signal_handler + 322
2   libSystem.B.dylib                   0x996fb45b _sigtramp + 43
3   ???                                 0xffffffff 0x0 + 4294967295
4   UIKit                               0x01b92de0 -[UIControl sendAction:to:forEvent:] + 67
5   UIKit                               0x01b95262 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
6   UIKit                               0x01b93e0f -[UIControl touchesEnded:withEvent:] + 458
7   UIKit                               0x01b2b3d0 -[UIWindow _sendtouchesForEvent:] + 567
8   UIKit                               0x01b0ccb4 -[UIApplication sendEvent:] + 447
9   UIKit                               0x01b119bf _UIApplicationHandleEvent + 7672
10  GraphicsServices                    0x05768822 PurpleEventCallback + 1550
11  CoreFoundation                      0x00debff4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
12  CoreFoundation                      0x00d4c807 __CFRunLoopDoSource1 + 215
13  CoreFoundation                      0x00d49a93 __CFRunLoopRun + 979
14  CoreFoundation                      0x00d49350 CFRunLoopRunSpecific + 208
15  CoreFoundation                      0x00d49271 CFRunLoopRunInMode + 97
16  GraphicsServices                    0x0576700c GSEventRunModal + 217
17  GraphicsServices                    0x057670d1 GSEventRun + 115
18  UIKit                               0x01b15af2 UIApplicationMain + 1160
19  ???                                 0x0ba72744 0x0 + 195503940
20  ???                                 0x0ba7267a 0x0 + 195503738
21  ???                                 0x090bfb9e 0x0 + 151780254
22  ???                                 0x090bfaea 0x0 + 151780074
23  ???                                 0x090bfb75 0x0 + 151780213
24  SmartPhonesolution1                 0x0000f5c7 mono_jit_runtime_invoke + 1332
25  SmartPhonesolution1                 0x001ed281 mono_runtime_invoke + 137
26  SmartPhonesolution1                 0x001ef968 mono_runtime_exec_main + 669
27  SmartPhonesolution1                 0x001eed52 mono_runtime_run_main + 843
28  SmartPhonesolution1                 0x000a3153 mono_jit_exec + 200
29  SmartPhonesolution1                 0x002a16b8 main + 4155
30  SmartPhonesolution1                 0x00002949 _start + 208
31  SmartPhonesolution1                 0x00002878 start + 40
来自gdb的调试信息: /tmp/mono-gdb-commands.WL0ypx:1:源命令文件中的错误: 无法自我调试 ================================================== =============== 执行本机代码时得到了SIGSEGV。这通常表明 Mono运行时或本机库之一中的致命错误 由您的应用程序使用。 未处理的异常:System.NullReferenceException:对象引用未设置为对象的实例   在(包装器托管到本地)MonoTouch.UIKit.UIApplication:UIApplicationMain(int,string [],intptr,intptr)   在/Users/plasma/Source/iphone/monophone/UIKit/UIApplication.cs:26中的MonoTouch.UIKit.UIApplication.Main(System.String [] args,System.StringPrincipalClassName,System.String委托ClassName)[0x00038]   在/Users/plasma/Source/iphone/monotouch/UIKit/UIApplication.cs:31中的MonoTouch.UIKit.UIApplication.Main(System.String [] args)[0x00000]   在/Users/aprdev/Projects/SmartPhonesolution/SmartPhonesolution/Main.cs:15中的SmartPhonesolution.Application.Main(System.String [] args)[0x00000]中     

解决方法

上周我也遇到了类似的问题。似乎MT 4在GC中比以前的版本更具攻击性,而我以前无法解决的问题现在引起了问题。 尝试在类级别声明UIButton,而不是在本地进行作用域设置。     ,移植现有的Objective-C代码时发生了同样的事情。该解决方案是确保您的按钮是类的实例成员。该代码运行良好(省略了额外的ViewController样板代码):
public partial class HomeViewController : UIViewController
{
    private UIButton _settingsButton;

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

    private void ConfigureNavigationBar()
    {
        // Add the Settings icon to nav bar

        _settingsButton = UIButton.FromType(UIButtonType.Custom);

        _settingsButton.SetImage(UIImage.FromBundle(\"Images/settings.png\"),UIControlState.Normal);

        _settingsButton.SizeToFit();

        _settingsButton.TouchUpInside += (sender,e) =>
            Console.WriteLine(\"clicked\");

        this.NavigationItem.RightBarButtonItem =
            new UIBarButtonItem(_settingsButton);
    }
}
请参见MonoTouch文档中的最后一段(\“何时保留对对象的引用\”):API设计     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?