核心数据中的动态属性

时间:2010-10-29 11:57:30

标签: objective-c core-data

我是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,我错过了什么? 提前感谢任何线索。

1 个答案:

答案 0 :(得分:2)

似乎问题在于,不会保留从提取中返回的“info”对象。释放mutableFetchResults数组后,释放对象并释放该对象。除其他症状外,访问dealloc'ed可导致无法识别的方法异常。

希望它有所帮助...... 凸轮