gpt4 book ai didi

ios - 在 DBAccess 中关联两个对象

转载 作者:搜寻专家 更新时间:2023-10-30 20:16:19 27 4
gpt4 key购买 nike

我正在为我的 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 个成员,如何将所有组成员和组详细信息存储在一个对象中以及如何检索它们?广告感谢。

最佳答案

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

这个问题源于这样一个事实,即在 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 值,这不需要维护,你可以创建可爱的逻辑来停止删除与其他对象相关的对象,而无需水合物很多对象,然后查看数组内部。

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

NSString* admin = person.group.adminName;

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

@property (strong) Group* group;

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

希望对您有所帮助,阿德里安

关于ios - 在 DBAccess 中关联两个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29672092/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com