xamarin.ios - Vici CoolStorage for MonoTouch 支持 UniqueIdentifier 键吗?

标签 xamarin.ios uniqueidentifier coolstorage

像这样声明的 sqlite 表:

CREATE TABLE Note(Id UNIQUEIDENTIFIER, Title TEXT)

在Windows上被Vici CoolStorage正确读取,但在MonoTouch上,抛出以下异常:

[ERROR] FATAL UNHANDLED EXCEPTION: System.InvalidCastException: Cannot cast from source type to destination type. at Vici.CoolStorage.CSDataProviderSQLite.GetSchemaColumns (System.String tableName) [0x00000] in <filename unknown>:0 at Vici.CoolStorage.CSSchema.CreateColumns () [0x00000] in <filename unknown>:0 at Vici.CoolStorage.CSSchema..ctor (System.Type objType) [0x00000] in <filename unknown>:0 at Vici.CoolStorage.CSSchema.Get (System.Type objectType) [0x00000] in <filename unknown>:0 at Vici.CoolStorage.CSList``1[Store.CoolStorage.Note]..ctor () [0x00000] in <filename unknown>:0

看起来基于类型 ID 检测列的数据类型的代码无法处理 Vici 的 CSDataProviderSqlite for MonoTouch 中的 UNIQUEIDENTIFIER 类型:

来自CSSqliteConnection.GetSchema:

switch (dbType) 
{
    case "TEXT": dataType = typeof(string); break;
    case "VARCHAR": dataType = typeof(string); break;
    case "INTEGER": dataType = typeof(int); break;
    case "BOOL": dataType = typeof(bool); break;
    case "DOUBLE": dataType = typeof(double); break;
    case "FLOAT": dataType = typeof(double); break;
    case "REAL": dataType = typeof(double); break;
    case "CHAR": dataType = typeof(string); break;
    case "BLOB": dataType = typeof(byte[]); break;
    case "NUMERIC": dataType = typeof(decimal); break;
    case "DATETIME": dataType = typeof(DateTime); break;
}

这里没有 UNIQUEIDENTIFIER 的处理程序。这是 Vici CoolStorage 中的错误吗?

最佳答案

我只会修改 Vici,因为看起来您可以访问源代码:

switch (dbType) 
{
    case "TEXT": dataType = typeof(string); break;
    case "VARCHAR": dataType = typeof(string); break;
    case "INTEGER": dataType = typeof(int); break;
    case "BOOL": dataType = typeof(bool); break;
    case "DOUBLE": dataType = typeof(double); break;
    case "FLOAT": dataType = typeof(double); break;
    case "REAL": dataType = typeof(double); break;
    case "CHAR": dataType = typeof(string); break;
    case "BLOB": dataType = typeof(byte[]); break;
    case "NUMERIC": dataType = typeof(decimal); break;
    case "DATETIME": dataType = typeof(DateTime); break;
    case "UNIQUEIDENTIFIER": dataType = typeof(Guid); break;
}

如果除此之外还有更多要求,您将不得不尝试。除非没有尝试。使用来源,卢克。

关于xamarin.ios - Vici CoolStorage for MonoTouch 支持 UniqueIdentifier 键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14809049/

相关文章:

ios - Monotouch 获取 UiPickerView 选中项

iphone - 完整的 Xamarin IDE 设置是什么样的?

ios - 使用 monogame 构建默认 iOS 解决方案时出现错误消息

ios - [UIDevice currentDevice].identifierForVendor.UUIDString 返回全零

sqlite - CoolStorage 字段不等于过滤器

c# - 如何在 iPhone 中显示/查找从 xamarin.ios 下载的图像?

iphone - 我想要检测 iPhone 设备的唯一标识符字符串(就像 UDID)?

android - 如何识别特定的 apk 构建,即使用户在 Google Play 中更新 apk

c# - 维西.CoolStorage : filter with ManyToOne and ManyToMany relation

c# - 将 Vici Cool Storage 与 monodroid 一起使用