如何在保存新对象之前检查对象是否已经存在于数据库中?

问题描述:

示例:我有一个朋友列表,我从Web服务器中将其作为XML检索。在设备上,我想用本地更新功能存储这些朋友。但我只想存储新朋友。为了保持简单,我仅以他们的名字来区分他们(是的,那很糟糕!)。如何在保存新对象之前检查对象是否已经存在于数据库中?

随着XML解析器遍历XML,它为所有朋友生成托管对象并将它们挂到托管对象上下文中。但在保存上下文之前,我想摆脱已经在数据库中的所有“新”朋友。目前,我有:

NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Friend" inManagedObjectContext:context]; 

NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; 

[request setEntity:entityDescription]; 

[request setPredicate:[NSPredicate predicateWithFormat:@"firstName == 'George'"]]; 
NSError *error = nil; 
NSArray *array = [context executeFetchRequest:request error:&error]; 

的问题是,大概是:它会发现,在整个管理对象上下文的朋友,所以也那些不在数据库中还没有。我怎么能确保我只保存那些真正新的东西,并在保存之前丢弃重复的东西?

使用唯一的ID。为您的朋友实体添加一个属性。例如,它可能是Web数据库的主键。