保留NSManagedObject崩溃

时间:2011-05-02 06:53:48

标签: objective-c

我在尝试使用NSManagedObject子类时遇到了一个奇怪的问题。我的代码看起来像这样:

[self.navigationController popViewControllerAnimated:NO];
MyController *myController = [[MyController alloc] init];
myController.managedObject = managedObject;

非常简单吧?但由于某种原因,它在用于设置“managedObject”的合成函数中崩溃。我尝试用这样的东西替换函数:

- (void) SetManagedObject:(NSManagedObjectSubClass*) obj
{
   if ( managedObject )
      [managedObject release];

   managedObject = obj;
-->   [managedObject retain];
}

在保留呼叫中崩溃了...我很难过,不知道从哪里开始调试这个。

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题:

  • 如果您提供自定义设置器,则您的属性不是合成属性(请移除SetManagedObject:并使用@synthesized指令)
  • 您的自定义setter会在保留对象之前释放该对象。因此,当您发送保留消息时,managedObject可能已被释放(这就是崩溃者)
  • SetManagedObject:有错误的情况。如果您决定提供自定义设置器,请使用s etManagedObject:
  • 不要将NS用作自定义子类的前缀(Apple使用NS)。

我使用的是合成属性。删除你的setter代码,声明@property(retain) XYManagedObjectSubClass managedObject;在.h文件中,并在实现中使用@synthesize