我正在使用xmpp框架处理聊天概念。但是我在显示聊天记录时遇到了问题。在核心数据中,重复条目被保存,我无法找到问题。然后我在从Core Data获取数组的同时放置了这个技巧。我在加载数组之前尝试删除重复的条目。
NSFetchedResultsController *controller = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:moc
sectionNameKeyPath:nil
cacheName:nil];
NSError *error = nil;
NSMutableArray *mutableFetchResult = [[moc executeFetchRequest:fetchRequest error:&error] mutableCopy];
NSSet *uniqueSet = [NSSet setWithArray:mutableFetchResult];
NSMutableArray *uniqueArray = [NSMutableArray arrayWithArray:[uniqueSet allObjects]];
NSMutableArray *entries = uniqueArray;
但它没有给出正确的数组对象。仍然有重复的对象。删除重复项可能是我做错了什么。请纠正我并给出一些解决方案。
提前致谢。
答案 0 :(得分:2)
您可以为核心数据实体创建一个类别,该类别可以获取重复副本并编写类似
的内容+ (Item *)itemWithParsedDictionary:(NSDictionary *)parsedItem inManagedObjectContext:(NSManagedObjectContext *)context
{
Item *item;
if (parsedItem) {
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Item"];
request.predicate = [NSPredicate predicateWithFormat:@"name = %@", parsedItem[@"Name"]];
NSError *error;
NSArray *matches = [context executeFetchRequest:request error:&error];
if (!matches || [matches count] > 1) {
NSLog(@"Multiple copies of unique item detected in the document");
} else if (![matches count]){
item = [NSEntityDescription insertNewObjectForEntityForName:@"Item"
inManagedObjectContext:context];
item.name = parsedItem[@"Name"];
} else {
item = [matches lastObject];
}
}
return item;
}
关于这方面的优秀课程有一个很好的教训: Stanford University free course CS193p