【发布时间】:2014-01-10 17:14:34
【问题描述】:
我的应用程序向服务器发送一个获取请求,其中包含一个日期(上次更新日期)以更新其内容(核心数据中的 2 个实体,没有关系,所有属性都是字符串)...大多数时候它只接收新内容,但有时它也会收到需要更新而不是插入的旧内容。 1 表非常简单,我只获取要在数组中更新的项目的 ID(来自服务器的 ID,而不是核心数据),然后获取这些项目,然后删除它们。之后,我插入更新的项目,因为它们是新的。这就是我删除它们的方式:
-(void)deleteOfEntity:(NSString*)entityName theItemsWithIds:(NSArray*)ids{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext: [self managedObjectContext]];
[fetchRequest setEntity:entity];
[fetchRequest setIncludesPropertyValues:NO];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"(id IN %@)", ids]];
NSError *error;
NSArray *fetchedObjects = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
if(fetchedObjects && [fetchedObjects count]>0){
for (NSManagedObject* toDelete in fetchedObjects) {
[[self managedObjectContext] deleteObject:toDelete];
}
}
}
因为标识每个项目的属性名称通常是 ID。但是另一个表需要 2 个属性来标识项目,例如复合键。如何建立“ids”数组?一个包含 2 个值的数组的数组,表示复合键?和谓词?我只是想知道是否有可能有效地做到这一点,如果不能,我总是可以获取所有项目并逐个检查,但为此我需要在另一个 for 中添加一个 for,这太难看了。任何帮助表示赞赏。
【问题讨论】:
标签: ios core-data nspredicate nsmanagedobject