MonoTouch.Dialog 崩溃

2023-12-08

我有一个小型测试应用程序,它仅在 3 个页面之间循环。 这是应用程序委托:

    public override bool FinishedLaunching (UIApplication app, NSDictionary options)
    {
        _session = new Session();
        _session.NextScreen += (screenIndex) => 
        {
            window.RootViewController = _viewControllers[screenIndex];
        };

        _viewControllers.Add(new Screen0(_session));
        _viewControllers.Add(new Screen1(_session));
        _viewControllers.Add(new Screen2(_session));

        // create a new window instance based on the screen size
        window = new UIWindow (UIScreen.MainScreen.Bounds);

        // If you have defined a view, add it here:
        // window.AddSubview (navigationController.View);
        window.RootViewController = _viewControllers[0];

        // make the window visible
        window.MakeKeyAndVisible ();

        return true;

如果我在每个屏幕上放置一个按钮,我可以从一个页面导航到另一个页面,即

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

        UIButton button = new UIButton(new RectangleF(30, 200, 80, 34));
        button.SetTitle("Go to 1", UIControlState.Normal);
        button.TouchUpInside += (sender, e) => 
        {
            _session.ExittingScreen = 0;
        };
        View.AddSubview(button);
    }

然而,当我使用 MonoTouch.Dialog 时,我会间歇性崩溃。这是我的代码:

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

        var rootElement = new RootElement("Register")
        {
            new Section()
            {
                new EntryElement("First Name", "required", ""),
                new EntryElement("Last Name", "required", ""),
                new EntryElement("Email Address", "required", ""),
                new EntryElement("Password", "required", "")
            },
            new Section()
            {
                new StyledStringElement("Submit you information", () => { _session.ExittingScreen = 1; })
            }
        };
        var dialogViewController = new DialogViewController(rootElement);
        var navigationController = new UINavigationController(dialogViewController);

        View.Add (navigationController.View);

和转储:

at (包装器托管到本机) MonoTouch.UIKit.UIApplication.UIApplicationMain (int,string[],intptr,intptr) 在 MonoTouch.UIKit.UIApplication.Main (字符串[],字符串,字符串) 在 MTD.Application.Main (字符串[]) 在(包装器运行时调用).runtime_invoke_void_object(对象,intptr,intptr,intptr)

本机堆栈跟踪:

0   MTD                                 0x00090b7c mono_handle_native_sigsegv + 284
1   MTD                                 0x00005f28 mono_sigsegv_signal_handler + 248
2   libsystem_c.dylib                   0x97da559b _sigtramp + 43
3   ???                                 0xffffffff 0x0 + 4294967295
4   UIKit                               0x02220952 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 201
5   Foundation                          0x0173786d __NSFireDelayedPerform + 389
6   CoreFoundation                      0x01195966 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 22
7   CoreFoundation                      0x01195407 __CFRunLoopDoTimer + 551
8   CoreFoundation                      0x010f87c0 __CFRunLoopRun + 1888
9   CoreFoundation                      0x010f7db4 CFRunLoopRunSpecific + 212
10  CoreFoundation                      0x010f7ccb CFRunLoopRunInMode + 123
11  GraphicsServices                    0x04789879 GSEventRunModal + 207
12  GraphicsServices                    0x0478993e GSEventRun + 114
13  UIKit                               0x02190a9b UIApplicationMain + 1175
14  ???                                 0x09ff6774 0x0 + 167733108
15  ???                                 0x09ff5958 0x0 + 167729496
16  ???                                 0x09ff57f0 0x0 + 167729136
17  ???                                 0x09ff587f 0x0 + 167729279
18  MTD                                 0x0000a292 mono_jit_runtime_invoke + 722
19  MTD                                 0x0016a17e mono_runtime_invoke + 126
20  MTD                                 0x0016e264 mono_runtime_exec_main + 420
21  MTD                                 0x00173685 mono_runtime_run_main + 725
22  MTD                                 0x00067495 mono_jit_exec + 149
23  MTD                                 0x002116c9 main + 2825
24  MTD                                 0x000032e5 start + 53

25 ??? 0x00000005 0x0 + 5

我做错了什么,还是这是一个错误?谢谢。


避免以下模式:

var navigationController = new UINavigationController(dialogViewController);
View.Add (navigationController.View);

because navigationController不会被引用(在managed侧)一旦View.Add调用完成,垃圾收集器可以处置它(只要需要)。然而从native预计它会存在。返回的呼叫(来自native to managed)到已处置的实例将使您的应用程序崩溃。

正确的模式是声明navigationController作为您类型的字段(而不是局部变量)并在方法中创建/分配它。这将保留对navigationController只要父实例存在就处于活动状态(并确保任何回调都不会到达已处置的对象)。

E.g.

private UINavigationController navigationController;
...
public override void ViewDidLoad ()
{
    ...
    var dialogViewController = new DialogViewController(rootElement);
    navigationController = new UINavigationController(dialogViewController);

    View.Add (navigationController.View);
    ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MonoTouch.Dialog 崩溃 的相关文章

  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • iPhone 崩溃日志?

    我已经配置了一部 iPhone 并让用户安装了该应用程序 它失败 是否有崩溃日志可以让我看到 iPhone 上失败的原因 Ian 如果您可以使用 xcode 将 iPhone 连接到计算机 则在管理器窗口中它会显示每个应用程序崩溃的崩溃日志
  • 如何使用 Castle Windsor 将对象注入到 WCF IErrorHandler 实现中?

    我正在使用 WCF 开发一组服务 该应用程序正在使用 Castle Windsor 进行依赖注入 我添加了一个IErrorHandler通过属性添加到服务的实现 到目前为止一切正常 这IErrorHandler对象 一个名为FaultHan
  • 为什么在 WebApi 上下文中在 using 块中使用 HttpClient 是错误的?

    那么 问题是为什么在 using 块中使用 HttpClient 是错误的 但在 WebApi 上下文中呢 我一直在读这篇文章不要阻止异步代码 https blog stephencleary com 2012 07 dont block
  • 使用可变参数包类型扩展的 C++ 函数调用者包装器

    我绑定了一些 API 并且绑定了一些函数签名 如下所示 static bool WrapperFunction JSContext cx unsigned argc JS Value vp 我尝试将对象和函数包装在 SpiderMonkey
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • 打破 ReadFile() 阻塞 - 命名管道 (Windows API)

    为了简化 这是一种命名管道服务器正在等待命名管道客户端写入管道的情况 使用 WriteFile 阻塞的 Windows API 是 ReadFile 服务器已创建启用阻塞的同步管道 无重叠 I O 客户端已连接 现在服务器正在等待一些数据
  • 在 NaN 情况下 to_string() 可以返回什么

    我使用 VS 2012 遇到了非常令人恼火的行为 有时我的浮点数是 NaN auto dbgHelp std to string myFloat dbgHelp最终包含5008角色 你不能发明这个东西 其中大部分为0 最终结果是 0 INF
  • 等待 IAsyncResult 函数直至完成

    我需要创建等待 IAsyncResult 方法完成的机制 我怎样才能做到这一点 IAsyncResult result contactGroupServices BeginDeleteContact contactToRemove Uri
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • 使用 omp_set_num_threads() 将线程数设置为 2,但 omp_get_num_threads() 返回 1

    我有以下使用 OpenMP 的 C C 代码 int nProcessors omp get max threads if argv 4 NULL printf argv 4 s n argv 4 nProcessors atoi argv
  • 使用 C 在 OS X 中获取其他进程的 argv

    我想获得其他进程的argv 例如ps 我使用的是在 Intel 或 PowerPC 上运行的 Mac OS X 10 4 11 首先 我阅读了 ps 和 man kvm 的代码 然后编写了一些 C 代码 include
  • GCC 的“-Wl,option”和“-Xlinker option”语法之间有区别吗?

    我一直在查看一些配置文件 并且看到它们都被使用 尽管在不同的体系结构上 如果您在 Linux 机器上使用 GCC 将选项传递给链接器的两种语法之间有区别吗 据我所知 阅读 GCC 手册时 他们的解释几乎相同 From man gcc Xli
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp
  • 无法将 admob 与 firebase iOS/Android 项目链接

    我有两个帐户 A 和 B A 是在 Firebase 上托管 iOS Android unity 手机游戏的主帐户 B 用于将 admob 集成到 iOS Android 手机游戏中 我在尝试将 admob 分析链接到 Firebase 项
  • 如何使用 C++11 using 语法键入定义函数指针?

    我想写这个 typedef void FunctionPtr using using 我该怎么做呢 它具有类似的语法 只不过您从指针中删除了标识符 using FunctionPtr void 这是一个Example http ideone
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • R 中的 3D 绘图,更好的可见表面

    With my data我使用以下代码创建 library rugarch library fGarch fd lt as data frame modelfit which density color lt rgb 85 141 85 m
  • 在每个页面上放置一个 django 登录表单

    如果用户未登录 我希望登录表单 来自 django contrib auth 的 AuthenticationForm 出现在我网站的每个页面上 当用户登录时 他们将被重定向到同一页面 如果有错误 错误将与表单显示在同一页面上 我想您需要一
  • 如何构建 AOSP 应用程序?

    我正在尝试从 AOSP 构建相机应用程序 我使用的是 UBUNTU 14 04 我按照官方文档中的指南进行操作 最后我执行 make Camera 我收到以下错误 including system media audio utils And
  • 如何在 `polars::prelude::DataFrame` 上使用 `ndarray_stats::CorrelationExt`?

    我正在尝试计算 Rust 中数据框的协方差 这ndarray stats板条箱定义这样的函数对于数组 我可以从 a 生成一个数组DataFrame using to ndarray 如果我使用文档中的示例 编译器会很高兴 a 但是如果我尝试
  • 错误:R 中文件路径中出现意外的字符串常量

    我正在尝试在 R 中运行此命令以运行函数 xlsxToR lt function C Users Nabila Dropbox IsolutionsProject ServiceRequestTickets zip keep sheets
  • C 中的后台进程(守护进程)不是 execvp() -ing

    因此 我尝试运行后台进程并从中执行 execvp 当我输入 cp path file var tmp 时 该进程并未复制该文件 这是我的代码供参考 void cmd bg char command pid t process id 0 pi
  • 将子文档添加到现有 Solr 6.4 集合文档会创建重复文档

    这个问题类似于Solr 不会覆盖 重复的 uniqueKey 条目 但我所处的情况是 我有大量现有文档已添加到集合中 没有子文档 并且我正在使用 独立而不是云 Solr 6 4 而不是 5 3 1 我们最近启用了子文档 以便我们可以存储更丰
  • 为什么 getSpeed() 在 android 上总是返回 0

    我需要从 GPS 获取速度和航向 然而我唯一拥有的号码是location getSpeed 为 0 或有时不可用 我的代码 String provider initLocManager if provider null return fal
  • Java WebStart 和认可的目录

    如何在 java webstart jnlp 文件中指定我的某些 jar 正在覆盖 JRE 内置实现 就像常规应用程序上认可的 lib 属性一样 似乎没有办法在网络启动中定义认可的目录 即使将 java endorsed dirs 属性定义
  • IntelliJ 问题 -> 无法创建名为“Main”的类

    标题说明了我的问题 我收到此错误消息 无法创建类无法解析模板 Class 错误信息 选定的类文件名 Main java 映射到非 java 文件类型 通过 TextMate 捆绑包支持的文件 有人对我如何解决这个问题有任何想法吗 请检查文件
  • 拆分字符串列值

    acctcode primekey groupby lt columns WDS 1 NULL lt values varchar FDS 2 NULL IRN 3 NULL SUM 4 1 2 3 STL 5 NULL WTR 6 NUL
  • 扩展 Asp.NET MVC3 控制器类

    我是一位经验丰富的 NET 程序员 也是一位使用 PHP 的 MVC 程序员 现在我是 MVC3 的新手 并尝试在其上构建我的第一个作品 因此我正在处理一些问题 对于初学者来说 如何扩展控制器类 有人可以指出我应该实施的指南 方法列表吗 T
  • 无法释放 C 中的 const 指针

    我怎样才能释放一个const char 我使用分配新内存malloc 当我尝试释放它时 我总是收到错误 不兼容的指针类型 导致此问题的代码类似于 char name Arnold const char str const char mall
  • Android 获取当前时间戳?

    我想像这样获取当前时间戳 1320917972 int time int System currentTimeMillis Timestamp tsTemp new Timestamp time String ts tsTemp toStr
  • Jenkins:根据相同 Jenkins 作业中的每个构建步骤结果发送电子邮件

    我只是想知道如何发送电子邮件电子邮件分机插件基于相同 Jenkins 作业的每个构建步骤结果 这是我的场景 我的 Jenkins 工作有 3 个构建步骤 构建步骤1 Pull latest code from github and Buil
  • 如何从 C++ 调用 fortran 例程?

    我希望从我的 C 代码中调用 fortran 例程 cbesj f 如何实现此目的 以下是我已完成的步骤 从 netlib amos 网页下载 cbesj f 以及依赖项 http www netlib org cgi bin netlib
  • 自动完成建议列表的 z-index 错误,我该如何更改?

    似乎我的自动完成列表的 z index 比我网站的某些元素低 所以它暴露不足 我应该编辑什么类 使用editCSS我播种这些类 并添加 我网站的z索引 但很少有不影响的是1 ui corner all ui menu item ingred
  • 如何打印第三列到最后一列?

    我正在尝试从 DbgView 日志文件中删除前两列 我对其中不感兴趣 我似乎找不到从第 3 列开始打印直到行尾的示例 请注意 每行都有可变数量的列 或更简单的解决方案 cut f 3 INPUTFILE只需添加正确的分隔符 d 即可获得相同
  • JTable 中的列的多个单元格渲染器?

    假设我有以下 JTable 按下按钮后就会显示 Name True Hello World False Foo Bar True Foo False Bar 我想渲染那些单元格最初对于 JCheckBox 来说是正确的 并且所有单元格都是最
  • MonoTouch.Dialog 崩溃

    我有一个小型测试应用程序 它仅在 3 个页面之间循环 这是应用程序委托 public override bool FinishedLaunching UIApplication app NSDictionary options sessio