所以我已經陷入了一種情況,出於某種原因,我有我正在保存的數據,但直到我終止該應用程序才完全保存。細節不完全問題,而是通過我的代碼看,我發現了以下內容:多NSManagedObjectContext或傳遞它?
我的應用程序委託我實例
- 的NSManagedObjectContext
- NSManagedObjectModel
- NSPersistentStoreCoordinator
我有一個後臺線程,可以處理和保存大量的數據 - 在這個線程中,我創建了第二個managedObjectContext初始化電話:
- (void)initCoreDataWithNSPersistentStoreCoordinator:(NSPersistentStoreCoordinator *)storeCoordinator andLocationManager:(CLLocationManager *)manager {
if (!managedObjectContext) {
if (storeCoordinator != nil) {
managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator:storeCoordinator];
}
} else {
NSLog(@"Dual Init attempted!!");
}
if (manager != nil) {
[self setLocationManager:manager];
}
/* Setup a Notification Handler now that COREData is initialized */
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(saveContext:)
name:@"saveContext"
object:nil];
}
放眼天下,我的代碼(這裏我沒有看到保存的問題)實際上,我身邊掠過類似這樣的原始環境與prepareForSegue方法:
// Pass on managedObjectContext
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// If the destination VC is able to take teh setManagedObjectContext method the current objectContext will be passed along.
if ([segue.destinationViewController respondsToSelector:@selector(setManagedObjectContext:)]) {
[segue.destinationViewController performSelector:@selector(setManagedObjectContext:)
withObject:_managedObjectContext];
} else {
NSLog(@"Segue to controller [%@] that does not support passing managedObjectContext", [segue destinationViewController]);
}
}
是一個的方法比其他方法「更好」?我猜測雙重背景對我的公正數據刷新負責,但我不確定。但真正的問題是蘋果「偏愛」這些方法之一,如果是的話。另外,無論哪種情況,我需要注意哪些缺陷。
謝謝!
不好 - 適合情況。主要的上下文是用於主線程。您需要使用不同的上下文以用於後臺線程。上面的[[[NSManagedObjectContext alloc] init]是你的實際代碼嗎?你確定你只有一個後臺線程? – Wain
跨線程共享相同的上下文是否存在問題? – Jeef
是的,它不能正常工作...... – Wain