2013-04-05 2 views
1

В настоящее время я разрабатываю приложение для бронирования автомобилей. Все данные, связанные с бронированием, хранятся в сущности «Заказы». Поскольку некоторые атрибуты «Бронирования» или отношения между «Книгами» и другими объектами являются обязательными, я решил добавить все управляемые объекты сущности «Заказы» в свой собственный managedObjectContext. Этот контекст также будет храниться в отдельной переменной, чтобы не потерять его. Это прекрасно работает, если я не буду подписывать (приложение для хранения в магазине или adhoc) мое приложение и развертывать его. ARC включен.Почему несохраненный управляемый объект теряет свой управляемый объектObjectContext

Класс Бронирования интерфейс

@interface Bookings : NSManagedObject { 
@private 
    NSManagedObjectContext *mContext; 
} 

@end 

Бронирование Класс реализации

@implementation Bookings { 

    + (Bookings *)booking { 
     NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:concurrencyType]; 
     [context setPersistentStoreCoordinator:[self persistentStoreCoordinator]]; 

     Bookings *object = (Bookings*)[[NSManagedObject alloc] initWithEntity:[self entityForName:pName] insertIntoMarenagedObjectContext:context]; 
     [object setSomeReservationData:...]; 
     ... 

     // here I store the context in an ivar of my booking object 
     [object->mContext = context]; 

     return object; 
    } 
} 

В этом состоянии объект Бронирование не будет сохранено!

Класс BookingsVC

Bookings *booking = [Bookings booking]; 
NSLog(@"Context: %@", [booking managedObjectContext]); 

Nothing сохранены или изменены, но контекст является недействительным.

вывода консоли на устройстве (АПЧРК подписанного и развернут с помощью iPhone-Configurator или Testflight)

... Context: (null) 

Консоль вывода на тренажере или устройства (АПЧРК подписанного, но установлен с помощью Xcode)

... Context: <NSManagedObjectContext: 0x893c520> 

Так почему же несохраненный управляемый объект теряет свой управляемый объект ObjectContext и как этого можно избежать? Это ошибка или ожидаемое поведение?

+0

Как объявляется 'mContext'? –

+0

Он объявлен как «NSManagedObjectContext * mContext». Я уточню свой вопрос. – lindinax

ответ

1

Ваш контекст аннулируется в конце вашей функции. see here
Ваш объект не удовлетворен контекстом, создающим все его свойства null, в режиме отладки существует пул автоопределений, который не позволяет освободить контекст.

+0

Спасибо за ссылку. Также не рассказывал о различиях DEBUG/RELEASE. Но я не вижу никакого отношения к моей проблеме, поскольку сообщаемое поведение (нулевые или нулевые значения) не соответствует моей проблеме. Чтобы не потерять контекст моего объекта, я решил сохранить его в иваре. Следовательно, не должно быть saveCount, наконец, 1 (+1 с помощью alloc, +1 путем присвоения, -1 release). – lindinax