0

我有一个核心数据实体,我试图从另一个实体分配关系。请参考下面的代码

#define kId @"id"

-(NSArray *)fetchObjectsForEntityName:(NSString *)entityName withPredicate:(NSPredicate *)predicate
{
    NSManagedObjectContext *newContext = [Helper generateNewContext];
    NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:newContext];
    NSFetchRequest *request = [NSFetchRequest new];
    [request setEntity:entity];
    if (predicate)
        [request setPredicate:predicate];
    NSError *error = nil;
    NSArray *resultArray = [newContext executeFetchRequest:request error:&error];
    return resultArray;
}

-(void)updateCoreDataEntity
{
    NSArray *objectsArray = [self fetchObjectsForEntityName:@"FirstEntity" withPredicate:nil];

//FirstObjects is a subclass of NSManagedObject class (Custom entity)
//kId is just #define as defined above
//Recasting removed

        for (FirstObjects *firstObject in objectsArray) {
            if ([firstObject.id isEqualToString:[dict valueForKey:kId]]) {
                     secondEntity.firstEntity = firstObject; //debugger hangs here  
        }
    }
}

我正在尝试将属于“FirstEntity”的对象提取到 NSArray

遍历该数组以找到所需的对象。

如果条件匹配,则将“firstObject”分配给 SecondEntity。

但是,由于调试器(和代码)挂在代码的最后一行,我无法使用此代码。

我在做什么错误,任何人都可以帮助使用此代码。

问候,

我明白

4

1 回答 1

1

secondEntity可能是未定义的。这肯定会导致崩溃。

此外,ID 的逻辑也存在缺陷。似乎比较不是与特定 ID 进行比较,而是与通用字符串“id”进行比较。也许您真的想与动态分配的 id 进行比较?另外,这些字符串 ID 是唯一的吗?(否则,您可能会得到不可预测的结果。)

最后,从代码中不清楚 Helper 是否始终提供相同的托管对象上下文。强烈建议这样做 - 单独的上下文主要用于并发。

于 2013-02-11T22:39:23.390 回答