【问题标题】:Xamarin.iOS SQLite errors cause drive to crash but runs perfectly on simulatorXamarin.iOS SQLite 错误导致驱动器崩溃但在模拟器上完美运行
【发布时间】:2017-03-21 08:44:48
【问题描述】:

因此,我们正在构建一个仅适用于 iOS 的应用程序,该应用程序使用 SQLite 在本地存储数据。我一直在 iOS 模拟器上运行它,它运行得很好,但是当我在物理 iPad(与模拟器相同的操作系统版本)上运行它时,会输出大量错误。

首先,我在尝试创建表时遇到错误(同样,此错误不会出现在模拟器上,它会在模拟器中正常创建表)如下所示,它不会创建“查询”正确,因为它没有添加任何属性,这些属性都是类的公共成员:

抛出的一个异常是“找不到'phoneNumber'的获取方法”。在这个类的类定义中,每个属性都是公共的并且有 {get;集;}定义。如果 phoneNumber 属性被注释掉,这个错误会在类中的下一个属性上抛出,说它找不到那个。

此外,在调试时,在设备上调试时,类的公共成员似乎是私有的(这可能是导致上述错误的原因)。看下图,第一个是在模拟器上调试的时候,第二个是在物理iPad上调试的时候:

还有其他人在物理设备上使用 SQLite 库有这么多问题吗?任何建议都会有所帮助,谢谢!

【问题讨论】:

    标签: ios sqlite xamarin.ios sqlite-net


    【解决方案1】:

    好的,如果其他人看到这里,我就能找出我的问题。因为我用来创建表的类还没有在我的代码中的任何地方被引用(它是我刚刚添加的一个新表),编译器正在从我的代码中剥离它的定义,所以当 Sqlite 去创建它没有找到任何东西,因此出现了错误。同样对于属性,我的代码中没有对所有属性的引用,所以它正在剥离它们。

    用于创建 sqlite 表的每个类顶部的这一行修复了该问题,它告诉编译器保留该类的所有部分:

    [Foundation.Preserve( AllMembers = true ) ]
    public class School
    {
        [PrimaryKey, AutoIncrement]
        public int id{ get; set;}
        public string schoolName{ get; set;}
        public string schoolAcronym{ get; set;}
        public string schoolState{ get; set; }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-06
      • 1970-01-01
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-06
      相关资源
      最近更新 更多