3

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

このグループには、すべてのグループ メンバーとグループの詳細を 1 つのオブジェクトに保存する方法と、それらを取得する方法よりも 4 つのメンバーがあります。前もって感謝します。

4

1 に答える 1

2

この質問に答えるために、これら 2 つのオブジェクト間に 1 対 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 値を探している場合、これは維持を必要とせず、ハイドレートする必要なしに、他のオブジェクトに関連している場合にオブジェクトの削除を停止する素敵なロジックを作成できます。たくさんのオブジェクトを調べてから、配列の中を調べます。

さらに、オブジェクトのドット表記を使用して、Person オブジェクトから厳密に型指定された関係をナビゲートするという美しいオプションを利用できます。

NSString* admin = person.group.adminName;

また、Group オブジェクトを Member に追加すると、次のようになります。

@property (strong) Group* group;

DBAccess は、グループプロパティの SQLite にインデックスを自動的に作成し、この方法でリンクされたオブジェクトはアクセスされる可能性が高いため、キャッシュ内でその重要性を優先します。

これが役に立てば幸いです、エイドリアン

于 2015-04-16T11:42:16.307 に答える