表仅在实际设备上没有(公共)列

时间:2015-05-05 17:18:32

标签: c# ios iphone xamarin sqlite-net

我有最简单的应用程序,我以为在我全神贯注之前我会在我的设备上尝试。但是,当我在iPhone上运行它时,我收到了最奇怪的错误消息(与我的macbook上的模拟器相关)。

  

表没有(公共)列。

我正在使用SQLite.Net PCL并且我已经从git hub构建了它,因为我遇到了一些问题,否则没有IOS的平台dll。

相关代码。

在我的模特中,我有这个:

public class Setting
{
    [PrimaryKey, AutoIncrement]
    public long Id { get; set; }

    [Indexed]
    public string Key { get; set; }

    public string Value { get; set; }

}

抛出此错误消息的代码很简单:

using (SQLiteConnection db = GetCon ()) {

            db.CreateTable<Setting> ();
}

但在我看来最奇怪的是这个代码在模拟器上工作正常,但崩溃了iphone本身的应用程序。

如果有人有一些想法会很棒。

编辑: 在this file第380行的SQLite.Net-PCL库上抛出此错误,但在设备上仅 ,而不是在模拟器上。

2 个答案:

答案 0 :(得分:9)

对于其他可能关注的人,我找到了问题的答案。问题是Type没有任何属性(有问题的类型是简单模型类)。知道这是垃圾我发现以下链接提供了更多信息,我将在这篇文章中涉及到链接已经死亡:

Type.GetProperties returning nothing

  

注意:小心汇编链接器

     

如果您在启用链接器的情况下构建,则可能需要使用该类   在某个地方,所以它不会在编译时被扯掉。有时,   只在代码中实例化类是不够的,链接器   可能会检测到该实例从未使用过,无论如何都会将其删除。

http://developer.xamarin.com/guides/ios/advanced_topics/linker/

  

可以通过链接器行为自定义链接过程   项目选项中的下拉列表。要访问此双击iOS   项目并浏览到iOS Build&gt;链接器选项,如下图所示   (详见链接)

我现在已经将它取消链接,但是,我会在发布之前尝试让链接器忽略这些类。谢谢你的帮助。

答案 1 :(得分:0)

我发现我的问题只是一个(不是那么微妙的)编程错误。我正在使用TypeInfo类,并希望使用Sqlite Connection方法:

 CreateTable (Type type);

我手中的东西是一个TypeInfo实例,我需要转换回System.Type。我不小心不假思索地使用 GetType()方法而不是 AsType()方法,这在您考虑它时很明显。我得到的线索是在异常消息中,OP消息是 System.Runtime是否具有公共属性?

var type = table.TypeInfo.AsType();
// var type = table.TypeInfo.GetType(); *WRONG*
connection.CreateTable(type);