iOS - FCModel - 未传递空值时保存模型时出错

时间:2014-07-30 13:35:37

标签: ios fmdb

我正在使用FCModel在iOS应用上维护数据库。当我尝试保存模型对象而不传递任何值或nil值并保存对象时,它正在生成NSUnknownKeyException。

这是我的客户模型界面:

@interface Customer : FCModel
    @property (nonatomic) int64_t id;
    @property (nonatomic) NSNumber *age;
    @property (nonatomic) NSString *profession;
    @property (nonatomic) NSString *first_name;
    @property (nonatomic) NSString *last_name;
@end

创建表语句:

if (! [db executeUpdate:
     @"CREATE TABLE IF NOT EXISTS CUSTOMER ("
         @"id INTEGER PRIMARY KEY,"// 0: id
         @"age INTEGER," // 1: server_id
         @"'profession' TEXT," // 2: c_id
         @"'first_name' TEXT," // 3: first_name
         @"'last_name' TEXT);" // 4: last_name
     ]) failedAt(1); 

这是初始化和保存部分:

Customer *customer = [Customer new];
[customer initWithNil];
customer.first_name = @"first_name";
customer.last_name = @"last_name";
[customer save];

我无法弄清楚为什么它为null允许的列提供NSUnknownKeyException。我尝试将它们作为零传递,但这也无效。

编辑:我在FCModel encodedValueForFieldName方法中添加了一个日志,发现fieldName为null。不确定这是否是正确的行为。

2 个答案:

答案 0 :(得分:1)

自提出这个问题以来已经有一年左右的时间了,但是创建声明可能是不完整的吗?删除Objective-C和评论会让您:

CREATE TABLE IF NOT EXISTS CUSTOMER (
     id INTEGER PRIMARY KEY,
     age INTEGER,
     'profession' TEXT,
     'first_name' TEXT,
     'last_name' TEXT,

也许你打算在最后关闭它。

'last_name' TEXT);

答案 1 :(得分:0)

在查看FCModel并亲自测试之后,我遇到了同样的问题。问题是类的名称和数据库表的名称。他们需要是一样的。简单的解决方案是更改数据库创建以获得正确的大小写。

CREATE TABLE IF NOT EXISTS Customer (

这应该可以解决这个问题。

错误的原因是FCModel正在尝试查找错误表的信息。在第一次传递期间,它正在尝试查找主键。它正在寻找的表是"客户"但你创造了它作为" CUSTOMER"。因为它无法找到该表,所以它返回null。