我是ObjC的新手,而且还是CoreData的新手。我试图找到一个答案,但从来没有得到我发生的事情。 我在我的控制器的loadView中初始化一个Managed对象,如下所示:
NSError *error;
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName: @"Info"
inManagedObjectContext: [self managedObjectContext]];
[request setEntity: entity];
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if (mutableFetchResults == nil)
{ /* Handle the error. */ }
else
{
if( [mutableFetchResults count] == 1 )
{
info = (Info*) [mutableFetchResults objectAtIndex: 0 ];
}
else if( [mutableFetchResults count] == 0 )
{
info = (Info*) [NSEntityDescription insertNewObjectForEntityForName:@"Info"
inManagedObjectContext:[self managedObjectContext]];
[info setEventsArray: [[[NSArray alloc] init] autorelease]];
[info setName:@"Holas"];
if ( ![managedObjectContext save:&error] )
{/* Handle the error. */}
else
{
NSString *name = [info name];
NSArray *array = (NSArray*)[info eventsArray];
int a = [array count];
DebugStr(@"", a, name);
}
}
else
{/* Handle the error. */}
};
[mutableFetchResults release];
[request release];
在DebugStr之前检查时,我通常可以访问属性名称和eventsArray。 现在,当使用以下代码处理和事件时(在同一个控制器的成员中):
Info *myInfoObj = [self info];
NSString *name = [myInfoObj name];
NSArray *anEventsArray = (NSArray*)[myInfoObj eventsArray];
DebugStr(@"", name, [anEventsArray count]);
...访问'name'会因访问者无法识别而引发异常。 我很困惑Info的(信息是顺便说一下,从NSManagedObject派生的)访问器是在一个上下文中识别而不是在另一个上下文中。动态(我认为在运行时)生成的访问器是否被缓存?我用XCode自动生成了Info,我错过了什么? 提前感谢任何线索。
答案 0 :(得分:2)
似乎问题在于,不会保留从提取中返回的“info”对象。释放mutableFetchResults数组后,释放对象并释放该对象。除其他症状外,访问dealloc'ed可导致无法识别的方法异常。
希望它有所帮助...... 凸轮