2011-02-23 68 views
0

我有一个nsmanagedObject这NSManagedObject包含一个NSSet。当我打电话与保留的2NSManagedObject - NSSet被删除?

计数将不保留一个NSManagedObject还保留了所有它的属性上的NSManagedObject释放

为NSSet中获取的数据丢失?

- (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 

回答

-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; 
+1

假设核心数据和您的设置器设置正确,您不应该手动定义相互关系 - 核心数据自动为您执行此操作。 – 2011-11-05 02:35:02

4

你为什么打电话[self.managedObject release]?你应该从来没有调用-release上调用一个getter的结果。这里适当的代码只是[managedObject release](假设managedObject是支持ivar的名称)。

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

+0

谢谢,但这并不解决问题在检查对象的属性的内容你已经发布了对象之后 – aryaxt 2011-02-23 23:47:24

+0

您的原始问题的前提是。你可以重申你的问题,这样就不会发生? – 2011-02-23 23:59:29

+0

这是一个核心数据对象(NSManagedObject),当我说NSSet数据丢失时,我的意思是永久性的,所以下次我进行抓取并检索同一个对象时,NSSet是空的。摆脱这种损失的方法是不释放导致泄漏的dealloc方法中的NSMAnagedObject。 – aryaxt 2011-02-24 00:12:14

1

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

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