天道酬勤,学无止境

在 DBAccess 中关联两个对象(Relating two objects in DBAccess)

问题

我正在为我的 iOS 项目使用 dbaccess。 如何将数组传递给 dbaccess 对象? 例如:我有 dbobject 像:

@interface Member : DBObject
@property (strong) NSString* firstname;
@property (strong) NSString* lastName;
@end

@interface Group : DBObject
@property (strong) NSString* groupName;
@property (strong) NSString* adminName;
@property (strong) Member* members;
@end

对于这个组,它有 4 个成员,而不是如何将所有组成员和组详细信息存储在一个对象中,以及如何检索它们? 广告中的感谢。

回答1

为了回答这个问题,我重新建模并在下面提供了一个示例,说明如何在这两个对象之间创建一对一的关系。

这个问题源于这样一个事实,即在 Objective-c 中没有类型化数组这样的东西。 如果有,我们将研究重新实现接口的工作方式。

我已经将 Group 对象移动到成员中,因为成员属于一个组,然后向 Group 对象添加了一个 members 方法以向后查看子对象。

@interface Member : DBObject

@property (strong) NSString* firstname;
@property (strong) NSString* lastName;
@property (strong) Group* group;

@end

@interface Group : DBObject

@property (strong) NSString* groupName;
@property (strong) NSString* adminName;

- (DBResultSet*)members;

@end

现在的实现看起来像这样。

@implementation Member

@dynamic firstname,lastName, group;

@end

@implementation Group

@dynamic adminName, groupName;

- (DBResultSet *)members {
    /* we achieve one-to-many relationships by querying the objects in the 
     manner a relational database would commonly be structured */

    return [[[Member query] whereWithFormat:@"group = %@", self] fetch];

}

- (void)entityDidDelete {

    /* when you create tight bonds, you may well wish to create 'trigger' methods 
     to clean data and keep the integrity in good order */

    for (Member* member in [[[Member query] whereWithFormat:@"group = %@", self] fetch]) {
        member.group = nil;
        [member commit];
    }

}

@end

现在没有什么可以阻止您创建一个数组作为属性类型,并在其中存储 Id 值。 但这并不那么干净,并且需要您维护它,而如果您正在寻找 FK 值,则这不需要维护,您可以创建可爱的逻辑来停止删除与其他对象相关的对象,而无需 hydration许多对象,然后查看数组内部。

此外,您还可以使用对象点符号来导航来自 Person 对象的强类型关系。

NSString* admin = person.group.adminName;

此外,当您将 Group 对象添加到 Member 时:

@property (strong) Group* group;

DBAccess 自动在 SQLite 中为属性创建了一个索引,并优先考虑它在缓存中的重要性,因为以这种方式链接的对象更有可能被访问。

希望这会有所帮助,阿德里安

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐