关联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个成员而不是如何将所有组成员和组详细信息存储在一个对象中以及如何检索它们? Thanx在adv。

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

这个问题源于在Objective-c中没有类型数组这样的事实。 有了,我们将看看重新实现接口的工作方式。

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

 @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中为属性创建索引,并在缓存中优先考虑其重要性,因为更容易访问以这种方式链接的对象。

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