NSManagedObject - NSSet被删除?

时间:2011-02-23 23:22:23

标签: iphone objective-c core-data nsmanagedobject

我有一个nsmanagedObject,这个NSManagedObject包含一个NSSet。

当我在保留计数为2的NSManagedObject上调用release时,

NSSet的数据丢失。

不保留NSManagedObject也会保留它的所有属性吗?

- (id)initViewWithManagedObject :(NSManagedObject)obj
{
     if (self = [super init])
     {
          self.managedObject = obj;
     }
     return self;
}

- (void)dealloc
{
     self.managedObject = nil;
     //Here is when the nsset data gets removed

     [super dealloc];
}

下面介绍了如何创建属性

@interface MyManagedObject :NSManagedObject
@property (nonatomic, retain) NSSet *mySet;
@end

@implementation MyManagedObject
@dynamic mySet;
@end

3 个答案:

答案 0 :(得分:4)

你为什么打电话给[self.managedObject release]?您应该从不调用-release来调用getter的结果。这里的相应代码只是[managedObject release](假设managedObject是支持ivar的名称。)

此外,一旦释放对象,为什么要检查其属性?

答案 1 :(得分:1)

假设您的应用程序正在获得您希望成为核心数据关系的NSSet是否安全?

在这种情况下,问题不在于释放和保留。问题是您在完成对象之前没有保存托管对象上下文,因此当您再次获取时,数据将丢失。

答案 2 :(得分:-2)

以下是问题的解决方案: 我必须创建从对象a到b以及从对象b到a的双向关系。 例如:

CountryManagedObject *country = [Factory getCountryByName:@"USA"];
StateManagedObject *state = [Factory createStateByName:@"California"];
[country.statesSet addObject:state]; //assuming NSSet responds to addObject
//the line below fixed the problem
//State has a reversed relationship to country named "country"
state.country = country;