2
我是新来的ObjC和更新的CoreData。我试图找到解决这个问题的答案,但从来没有得到什么发生在我身上。 我初始化我的控制器的loadView管理对象是这样的:核心数据的动态属性
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]);
...访问“名称”抛出一个异常,由于访问者的是无法识别的。 我很疑惑Info的(信息是从NSManagedObject派生的)访问器是如何在一个上下文中识别的,而不是在另一个上下文中识别的。是动态的(我认为在运行时)生成访问器缓存?我用XCode自动生成了Info,我错过了什么? 预先感谢任何线索。
嗨凸轮,这是这个把戏。回想起来,这似乎是合乎逻辑的,因为insertNewObjectForEntityForName没有任何标志说我拥有它的返回对象。然而,它是吸引人的(并且误导),异常抛出的异常不是空对象解引用(这是对动态类型语言的重复吗?)。 – NuBie 2010-10-29 13:42:36
嗨NuBie,如果Cam的答案解决了这个问题,很高兴选择它作为正确答案 - 只需点击Cam答案左边的复选框即可。干杯 – quantumpotato 2011-05-02 20:02:04