В таблице нет (общедоступных) столбцов только на реальном устройстве

У меня есть самый простой из приложений, которые, как я думал, я попробую на своем устройстве, пока я не увлекся. Тем не менее, я получаю самое странное сообщение об ошибке, когда я запускаю его на своем iPhone (как показано на эмуляторе на моем macbook).

В таблице нет (общедоступных) столбцов.

Я использую SQLite.Net PCL, и я построил его из концентратора git, так как у меня были некоторые проблемы с тем, что у него не было платформы dll для IOS.

Соответствующий код.

В моих моделях у меня есть это:

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.

Если у кого-то есть идеи, это было бы здорово.

EDIT: Эта ошибка возникает в библиотеке SQLite.Net-PCL на этом файле строка 380, но только на устройстве, а не на эмуляторе.

Ответы

Ответ 1

Для других, к которым это может относиться, я нашел ответ на свою проблему. Проблема заключалась в том, что Type не имеет никаких свойств (тип, о котором идет речь о классе простой модели). Зная, что это мусор, я нашел следующие ссылки, которые дали больше информации, которую я расскажу в этом сообщении, если ссылки будут мертвыми:

Type.GetProperties не возвращает ничего

ПРИМЕЧАНИЕ. Будьте осторожны с компоновщиком компоновки

Если вы строите с включенным компоновщиком, вам может понадобиться использовать класс где-то, так что он не будет сорван во время компиляции. Иногда, только экземпляров класса в вашем коде недостаточно, компоновщик может обнаружить, что экземпляр никогда не используется и все равно удалит его.

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

Процесс связывания может быть настроен с помощью поведения компоновщика в разделе "Параметры проекта". Чтобы получить доступ к этому двойному щелчку на iOS проект и перейти к iOS Build > Параметры компоновщика, как показано ниже (подробнее см. ссылку)

Теперь я оставил его несвязанным, однако я попробую перед выпуском, чтобы заставить компоновщик игнорировать эти классы. Спасибо за вашу помощь.

Ответ 2

Я обнаружил, что моя проблема - это просто (не такая тонкая) ошибка программирования. Я работал с классом 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);