目前,我正在開發一款預訂汽車的應用程序。所有與預訂相關的數據都存儲在實體「預訂」中。由於「預訂」或「預訂」與其他實體之間的關係的某些屬性是強制性的,我決定將實體「預訂」的所有managedObjects添加到他們自己的managedObjectContext中。這個上下文也將存儲在一個單獨的變量中以避免丟失。這工作正常,除非我會簽署(企業商店或adhoc)我的應用程序並部署它。 ARC已啓用。爲什麼未保存的managedObject會丟失其managedObjectContext
類預訂界面
@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]);
沒有保存或改變,但是情況下是空的。
上設備
... Context: (null)
上模擬器或設備(自組織簽署但安裝通過的Xcode)控制檯輸出
... Context: <NSManagedObjectContext: 0x893c520>
(自組織通過iPhone-配置或Testflight簽署並展開)
控制檯輸出 那麼爲什麼一個未保存的managedObject會丟失它的managedObjectContext,這怎麼可以避免呢?這是一個錯誤還是預期的行爲?
如何聲明'mContext'? – 2013-04-05 18:34:59
它被聲明爲'NSManagedObjectContext * mContext'。我會更新我的問題。 – lindinax 2013-04-10 21:57:13