我有一个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
答案 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;