gpt4 book ai didi

iphone - 核心数据: fetch an NSManagedObject by its properties

转载 作者:行者123 更新时间:2023-12-03 16:53:20 25 4
gpt4 key购买 nike

我有一个对象 NetworkMember,它没有属性,但由其关系“人员”、“网络”、“级别”和“角色”定义。在我的应用程序中,我找到了所有四种关系,但我想确保不要重复注册我的 NetworkMember,因此我想在实例化此 NSManagedObject 之前搜索它。

我应该如何编写一个查询来查询仅由关系组成的 NSManagedObject?

干杯

尼克

最佳答案

您可以针对关系编写 NSPredicate,就像针对属性编写 NSPredicate 一样。

例如:

- (BOOL)isPerson:(Person *)person memberOfNetwork:(Network *)network {
// assume NetworkMember entity is ivar networkMemberEntity_
// assume NSManagedObjectContext is ivar context_

NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
[fetch setEntity:networkMemberEntity_];
[fetch setPredicate:[NSPredicate predicateWithFormat:
@"(person == %@) AND (networks CONTAINS %@)", person, network]];
[fetch setFetchLimit:1];

NSError *error = nil;
NSInteger count = [context_ countForFetchRequest:fetch error:&error];
if (count < 0) {
// always handle errors in real code
// and never check for errors using "error == nil"
}

return count > 0;
}

但是,在您提出的情况下,您应该认真考虑是否真的需要这样做。听起来您正在尝试对人员和网络之间的多对多关系进行建模。如果您有数据库背景,您可能会认为为此需要一个连接表,并创建一个中间实体。

但是,Core Data 可以为您管理所有这些;您可以直接在 Person 和 Network 之间创建多对多关系,而不必自己维护任何中间实体或表。就像处理 Core Data 中的关系时不必担心主键和外键一样,该框架会为您处理此类事情,让您在对象级别工作。

关于iphone - 核心数据: fetch an NSManagedObject by its properties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2827070/

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