gpt4 book ai didi

iphone - 如何检查Core Data是否已经有值?

转载 作者:行者123 更新时间:2023-12-01 17:27:09 26 4
gpt4 key购买 nike

我有这段代码,它从一个单元格获取ID和名称。然后,当我选择一行时,我必须保存此选择并将其发送到Core Data ...但是例如:如果我已经有一个重复的城市名称..如何停止添加?

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSManagedObject *villesR = [NSEntityDescription
insertNewObjectForEntityForName:@"Ville"
inManagedObjectContext:context];


[villesR setValue:idVille forKey:@"idV"];
[villesR setValue:nomville forKey:@"nom"];

[self.navigationController pushViewController:detailView animated:YES];

最佳答案

提丹

当需要检查对象是否已经存在时,需要设置获取请求并使用特定的谓词。在您的情况下,您可以针对Ville进行简单获取,看看您是否已经拥有idV。我想idV就像您的Ville的标识符。检查nom可以相同,但是您可以在世界上两个不同的地方使用两个具有相同名称的cities

@alpz 解决方案还可以。此外,您还可以将感染限度设置为1:

[request setFetchLimit:1];

否则你可以简单地做
NSUInteger count = [context countForFetchRequest:request error:&error];    
if(count == 0) {

// add the new city here
}

代替
NSArray *results = [context executeFetchRequest:request error:nil]; 

@Phillip Mills 表示您可以使用 NSManagedObject子类,而不是使用键值编码访问。我认为使用类的属性而不是使用纯字符串键更容易。

因此,一旦创建了 Ville子类( organising-core-data-for-ios),就可以为其创建一个名为 Ville+Extension的类别,并创建如下所示的方法:
+ (Ville *)villeWithUniqueName:(NSString *)name withManagedObjectContext:(NSManagedObjectContext*)context
{
NSFetchRequest * request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Ville" inManagedObjectContext:context]];
[request setPredicate:[NSPredicate predicateWithFormat:@"nom = %@", name];
[request setFetchLimit:1];

NSArray *results = [context executeFetchRequest:request error:nil];

Ville* theVille = nil;

if ([results count] == 0)
{
theVille = // create the new here
}
else
{
theVille = (Ville*)[results objectAtIndex:0];
}

[request release]; // if you don't use ARC

return theVille;
}

然后,使用该类别(导入后),例如:
Ville* theVille = [Ville villeWithUniqueName:@"yourName" withManagedObjectContext:yourContext];

希望能有所帮助。

关于iphone - 如何检查Core Data是否已经有值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11031930/

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