如何从executeFetchRequest方法的返回中检索业务对象?

时间:2010-03-07 16:39:26

标签: iphone core-data

我的项目中有一个ConfiguracaoDaApp类,它是一个NSManagedObject子类。我没有更改XCode生成的默认代码。

我在我的app委托中声明了该类型的实例变量,在我的appDidFinishLaunching方法中,我一直尝试从数据库中检索的对象中分配它的值,如下所示:

    NSFetchRequest      *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity  = [NSEntityDescription entityForName:@"ConfiguracaoDaApp" inManagedObjectContext:self.managedObjectContext];

    [request setEntity:entity];
    configDaApp = [[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0];

问题在于行

[[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0];

不要返回ConfiguracaoDaApp类型的对象。

我尝试将行更改为:

configDaApp = [[[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0] entity];

然后返回一个NSEntityDescriptor,问题仍然存在。

所以,我的问题是:如何从executeFetchRequest中检索一个真正的业务对象?

提前致谢。

Obs:请原谅我,如果这是一个初学者问题,但是我的第一个iPhone应用程序。

1 个答案:

答案 0 :(得分:0)

我只是弄清楚发生了什么:

[[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0];

返回一个autorelease对象,当我尝试访问代码其他部分的属性时,其内容是应用程序的内存垃圾,因为原始的ConfiguracaoDaApp对象是由autorelease池释放的。我的属性被声明为retain,但无论如何该对象都是自动释放的。所以我明确地提出了保留:

configDaApp = [[[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0] retain];

然后一切正常。

无论如何,谢谢你们。