【发布时间】:2016-01-22 11:22:45
【问题描述】:
我有两个预先填充的核心数据实体(它们有关系,以及它的逆关系)(每个大约有 50k 个寄存器),我需要建立一个关系。这几乎是1:1的关系。它们有一个共同的属性,所以如果两个属性相等,它们一定是有关系的。
我正在尝试以粗略的方式进行操作,但遇到了很多内存问题(它很快升级为内存警告)。
@autoreleasepool {
NSFetchRequest *e2sRequest = [[NSFetchRequest alloc] initWithEntityName:@"Entity2"];
e2sRequest.includesPropertyValues = NO;
e2sRequest.includesSubentities = NO;
NSArray *e2s = [self.fatherMOC executeFetchRequest:e2sRequest error:nil];
if(e2s.count > 0) {
NSFetchRequest *e1sRequest = [[NSFetchRequest alloc] initWithEntityName:@"Entity1"];
e1sRequest.includesPropertyValues = NO;
e1sRequest.includesSubentities = NO;
NSArray *e1s = [self.fatherMOC executeFetchRequest:e1sRequest error:nil];
for(Entity1 *e1 in e1s) {
NSString *attributeInCommon = e1.attributeInCommon;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"attributeInCommon = %@", attributeInCommon];
Entity2 *e2matching = (Entity2 *)[e2s filteredArrayUsingPredicate:predicate].lastObject;
if(e2) {
e1.e2 = e2matching;
}
}
}
}
我尝试在 NSDictionary 中获取内存中的共同属性和 objectID,但没有结果。我尝试了更多的方法,一些非常慢,另一些则非常消耗记忆。
我知道我必须检查错误,我知道我可以用更少的代码行来完成它,但将其视为调试/紧急代码,所以我会修复。
提前致谢
【问题讨论】:
标签: ios objective-c core-data foreign-key-relationship nsfetchrequest