1

尝试保存对象时遇到问题。保存后其属性为空。

我的对象:

@interface Route : DBObject
@property (strong) NSString* content;
@property bool hidden;
@end

测试代码:

[DBAccess setDelegate:self];
[DBAccess openDatabaseNamed:@"test"];
Route * route = [Route new];
route.content = @"test content";
route.hidden = true;
[route commit];

DBResultSet * routes = [[Route query] fetch];
for (Route * r in routes) {
    NSLog(@"Route content %@, hidden %d", r.content, r.hidden);
}

po route提交后给出了这个:

| content            | UNKNOWN      | Nil value
| Id                 | NUMBER       | 1.000000                                            
| hidden             | NUMBER       | 0.000000   

日志输出:

Route content (null), hidden 0                                         
4

1 回答 1

0

DBAccess 需要您希望使用 ORM 持久化的属性以使用 @dynamic 实现。

DBAccess 将它自己的 getter 和 setter 注入到类中,但是如果您使用 @synthesize,那么 Objective-c 传统上会为您创建这些,或者最近如果您根本没有指定任何内容,它会自动执行此操作。

以下是现在几乎完成的新网站的一部分,提供了更清晰的帮助和说明:

4.) 创建您的数据对象

DBAccess 对象是在其上定义了属性的普通类,ORM 然后检查所有这些类并将它们的结构镜像到 SQLite 数据库中。如果添加或删除列,则表会更新以表示类的当前结构。

属性需要使用@dynamic 来实现,这是为了向 ORM 表明它将控制从数据库中获取和设置这些值。

任何使用 @synthesize 实现的属性都不会被持久化,但 DBAccess 也不会干扰它们。通过这种方式,您可以创建仅部分由 ORM 使用的大型类,但可以消除应用程序中对其他单独类的需求。

于 2015-03-30T06:30:43.147 回答