Iphone NSManagedObject-NSSet是否已删除?
我有一个nsmanagedObject此nsmanagedObject包含一个NSSet 当我对保留计数为2的NSManagedObject调用release时,NSSet get的数据丢失 保留NSManagedObject不也会保留它的所有属性吗Iphone NSManagedObject-NSSet是否已删除?,iphone,objective-c,core-data,nsmanagedobject,Iphone,Objective C,Core Data,Nsmanagedobject,我有一个nsmanagedObject此nsmanagedObject包含一个NSSet 当我对保留计数为2的NSManagedObject调用release时,NSSet get的数据丢失 保留NSManagedObject不也会保留它的所有属性吗 - (id)initViewWithManagedObject :(NSManagedObject)obj { if (self = [super init]) { self.managedObject =
- (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
为什么要调用
[self.managedObject release]
?对于调用getter的结果,决不能调用-release
。这里合适的代码就是[managedObject release]
(假设managedObject
是支持ivar的名称)
此外,一旦释放对象,为什么要检查其属性?为什么要调用
[self.managedObject release]
?对于调用getter的结果,决不能调用-release
。这里合适的代码就是[managedObject release]
(假设managedObject
是支持ivar的名称)
此外,一旦释放对象,为什么要检查其属性?假设您的应用程序正在获得一个您希望成为核心数据关系的NSSet,这样安全吗
在这种情况下,问题不在于释放和保留。问题是,在处理完对象之前,您没有保存托管对象上下文,因此当您再次获取时,数据将丢失。假设您的应用程序正在获取一个NSSet,您希望它成为核心数据关系,这样安全吗
在这种情况下,问题不在于释放和保留。问题是在处理对象之前没有保存托管对象上下文,因此当再次提取时,数据将丢失。以下是解决问题的方法: 我必须创建从对象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;
以下是问题的解决方案: 我必须创建从对象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;
谢谢,但这并不能解决问题。您最初的问题是在释放对象后检查对象属性的内容。你能重述一下你的问题吗?这是一个核心数据对象(NSManagedObject),当我说NSSet data get丢失时,我的意思是永久丢失,所以下次我提取并检索同一对象时,NSSet是空的。消除丢失的方法是不在dealloc方法中释放NSMAnagedObject,这会导致泄漏。您是否在任何释放操作发生之前保存上下文?不,我每次应用程序SuspendSthank时都保存上下文,但这并不能解决问题您最初的问题是基于在释放对象后检查对象属性的内容。你能重述一下你的问题吗?这是一个核心数据对象(NSManagedObject),当我说NSSet data get丢失时,我的意思是永久丢失,所以下次我提取并检索同一对象时,NSSet是空的。消除丢失的方法是不在dealloc方法中释放NSMAnagedObject,这会导致泄漏。您是否在任何释放操作发生之前保存上下文?否每次应用程序暂停使用核心数据时,我都会保存上下文,并且设置正确,您不必手动定义互惠关系核心数据会自动为您定义互惠关系。假设核心数据和设置器设置正确,您不必手动定义互惠关系核心数据会自动为您定义互惠关系。