2013-02-08 62 views
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。

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

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

问候,

iSee的

+2

什么是FirstObject类?什么是字典?什么是unreadArray?为什么id属性是一个字符串? kId在哪里以及如何定义?什么是unreadcCountNew?你为什么重铸managedObject?等等...你的问题不清楚。尽量简化! – Mundi 2013-02-08 19:09:48

+0

@Mundi,我希望更新的代码很清楚。 – iSee 2013-02-11 10:35:58

回答

1

secondEntity也许是不确定的。这肯定会导致崩溃。

此外,该ID的逻辑是有缺陷的。看起来比较不是与特定ID进行比较,而是与通用字符串“id”进行比较。也许你真的想比较一个动态分配的ID?此外,这些字符串id是唯一的吗? (如果不是,您可能会得到不可预知的结果。)

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

+0

是的!你答案的最后一行是问题。在给NSManagedObjectContext的新实例之前,Helper只检查线程是否是主线程。这固定了它。 由于显而易见的原因,我无法发布生产代码,这导致了混淆。感谢您花时间阅读半熟的代码,了解它并提供答案。 – iSee 2013-02-12 05:00:43