1

在我的应用程序中,我将 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);
    }

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

4

2 回答 2

3

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

于 2013-09-30T20:11:23.140 回答
1

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

于 2013-09-30T20:29:44.173 回答