gpt4 book ai didi

objective-c - 如何检查实体是否已存在于持久存储中

转载 作者:太空狗 更新时间:2023-10-30 03:35:50 26 4
gpt4 key购买 nike

我是 Core Data 编程的新手。我有一个问题希望得到一些澄清。

假设我有一个名为 Company 的 NSManagedObject,具有以下属性:

  • 公司名称
  • 公司邮箱
  • 公司电话
  • 公司用户名
  • 公司密码

在这个对象中,companyName 属性被索引。

那么,我的问题是,我如何才能确保只有具有相同 companyName、companyEmail、companyPhoneNo、companyUserName 和 companyPassword 的条目?

我是否需要发出请求以检查是否存在任何具有相同属性值的记录,或者使用对象 ID 进行简单检查是否足够?

谢谢。

最佳答案

下面是一个可能有帮助的例子:

NSError * error;
NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:NSStringFromClass([self class])
inManagedObjectContext:managedObjectContext]];
[fetchRequest setFetchLimit:1];

// check whether the entity exists or not
// set predicate as you want, here just use |companyName| as an example
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"companyName == %@", companyName]];

// if get a entity, that means exists, so fetch it.
if ([managedObjectContext countForFetchRequest:fetchRequest error:&error])
entity = [[managedObjectContext executeFetchRequest:fetchRequest error:&error] lastObject];
// if not exists, just insert a new entity
else entity = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([self class])
inManagedObjectContext:managedObjectContext];
[fetchRequest release];

// No matter it is new or not, just update data for |entity|
entity.companyName = companyName;
// ...

// save
if (! [managedObjectContext save:&error])
NSLog(@"Couldn't save data to %@", NSStringFromClass([self class]));

提示:countForFetchRequest:error:实际上并没有获取实体,它只是返回一些与您之前设置的predicate相匹配的实体。

关于objective-c - 如何检查实体是否已存在于持久存储中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10265513/

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