今天早上更新 Xamarin/Monotouch 后,我似乎遇到了一些问题。
我将 MonoDevelop 从 10 天前最新且稳定的任何版本更新到 3.06(抱歉我不能更具体),并将 Xamarin Studio 更新到 4.0.2。我一直在专门使用 MonoDevelop,现在才打开 Xamarin Studio,想知道我是否遇到了 MonoDevelop 错误。
我当前的 MonoTouch 版本是:
Xamarin.iOS
版本:6.2.1.201(企业版)
哈希:ed9807c
分支:
构建日期:2013-19-03 13:42:59-0400
在任一 IDE 中,当在模拟器中以发布或调试模式运行我的应用程序时,我的应用程序崩溃并出现以下 InvalidCastExceptions:
System.InvalidCastException: Unable to cast object of type 'MonoTouch.Foundation.NSObject' to type 'MonoTouch.Foundation.NSUserDefaults'.
System.InvalidCastException: Unable to cast object of type 'MonoTouch.Foundation.NSObject' to type 'MonoTouch.Foundation.NSBundle'
这些不是我希望我失败的那种演员:-)
在任何情况下,当从 Xamarin Studio 或 MonoDevelop 构建和安装时,该应用程序都能在装有 iOS 6.1.2 的 iPhone 4 上正确编译、传输和运行
我已将运行时目标设置为 2.10.12、2.10.11 和 2.10.9(通过菜单中的这个新的运行时目标菜单选项,即使它没有任何效果),并且每次应用程序崩溃时都相同方法。
这都是更新之前正常工作的代码(上周,在我去冰岛度假之前,我离开时没有人碰任何东西)
我们不使用任何第三方程序集;我已经清理并重建了所有组件,但这并没有帮助。我将尝试在一个小型测试解决方案中缩小问题范围。
更新 1: 在 MonoDevelop 中查看程序集的版本号,我看到:
Assembly Version 2.0.5.0, found in /Developer/MonoTouch/usr/lib/mono/2.1
Monotouch 的 Assemlby 版本为 0.0.0.0。
我创建了一个新的 MonoTouch 项目并将第一行添加到它的 main 方法中:
public class Application
{
static void Main (string[] args)
{
// My real App crashes on this line with an InvalidCastException:
string s = NSUserDefaults.StandardUserDefaults.StringForKey("Login");
UIApplication.Main (args, null, "AppDelegate");
}
}
这运行良好。
更新 2: 在更改测试应用程序的构建选项以匹配我们在真实应用程序中的内容后,我遇到了同样的崩溃。我们拥有的构建选项是:
- iPhone 构建 -> 常规 -> 链接器选项 -> 链接所有程序集
- iPhone Build -> Advanced -> 使用 SGen 分代垃圾收集器
- iPhone Build -> Advanced -> 使用 SGen 分代垃圾收集器 -> 使用引用计数扩展。
禁用(“使用引用计数扩展”)允许测试应用程序和我的真实应用程序运行而不会崩溃。所以问题似乎出在那儿。