我的项目中有一个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应用程序。
答案 0 :(得分:0)
我只是弄清楚发生了什么:
[[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0];
返回一个autorelease对象,当我尝试访问代码其他部分的属性时,其内容是应用程序的内存垃圾,因为原始的ConfiguracaoDaApp对象是由autorelease池释放的。我的属性被声明为retain,但无论如何该对象都是自动释放的。所以我明确地提出了保留:
configDaApp = [[[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0] retain];
然后一切正常。
无论如何,谢谢你们。