我正在使用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。不确定这是否是正确的行为。
答案 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。