NSManagedObject - NSSet удаляется? - PullRequest
       14

NSManagedObject - NSSet удаляется?

0 голосов
/ 24 февраля 2011

У меня есть nsmanagedObject, этот NSManagedObject содержит NSSet.

данные для get NSSet теряются, когда я вызываю выпуск для NSManagedObject с сохраняемым счетчиком 2.

Не сохранит 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 ]

4 голосов
/ 24 февраля 2011

Почему вы звоните [self.managedObject release]? Вы должны никогда звонить -release по результатам вызова геттера. Соответствующий код здесь просто [managedObject release] (при условии, что managedObject - это имя резервного ивара).

Кроме того, когда вы отпускаете объект, зачем вы проверяете его свойства?

1 голос
/ 24 февраля 2011

Безопасно ли предполагать, что ваше приложение получает NSSet, который вы хотите использовать в качестве отношения базовых данных?

В этом случае проблема заключается не в выпуске и сохранении.Проблема в том, что вы не сохраняете контекст управляемого объекта до того, как закончите работу с объектом, поэтому при повторной выборке данные будут потеряны.

0 голосов
/ 25 февраля 2011

Вот решение проблемы: мне нужно было создать двусторонние отношения от объекта 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;
...