NSManagedObjects数组在将其传递给另一个方法后,其中包含空值

时间:2013-09-30 19:26:16

标签: macos core-data nsmanagedobject magicalrecord

在我的应用程序中,我使用MagicalRecord进行CoreData堆栈,我有一个奇怪的NSManagedObject行为。我在我的DB类中有这个方法,它从DB中获取Stuff实体的所有条目。我正在从另一个类调用此方法,并且在这个getStuff方法内部我得到正确的值,在下面的日志语句中打印出来。

-(NSArray*) getStuff
{
    NSManagedObjectContext * managedObjectContext = [NSManagedObjectContext MR_contextWithStoreCoordinator:self.psc];

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Stuff"];

    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"idNumber" ascending:YES];

    [request setSortDescriptors:[NSArray arrayWithObjects:sort, nil]];

    NSError *error = nil;
    NSArray *arr = [managedObjectContext executeFetchRequest:request error:&error];

    for (Stuff *stuff in arr) {
         NSLog(@"stuff fN: %@",stuff.idNumber);
    }

    if (arr)
       return arr;

    return [NSArray array];
}

但是,此方法返回到另一个类的数组包含所有这些具有null值的对象。

// -- some othe class
// call DB to check if we have stuff there
NSArray* stuff = [database getStuff];

for (Stuff *stuff in stuff) {
         NSLog(@"stuff fN: %@",stuff.idNumber);
    }

有谁知道为什么会这样?!任何形式的帮助都非常感谢!

2 个答案:

答案 0 :(得分:3)

您的getStuff方法创建了一个新的NSManagedObjectContext,它(假设您使用ARC编译)在方法结束时解除分配。托管对象在其创建的上下文中“活动”。在释放上下文后访问其属性不起作用。

答案 1 :(得分:1)

假设您使用MagicalRecord设置CoreData堆栈,可以使用[NSManagedObjectContext MR_contextForCurrentThread]代替[NSManagedObjectContext MR_contextWithStoreCoordinator:self.psc]