私の最初のView Controllerで私がやっていることは、viewDidLoadのUIManagedDocumentからNSManagedObjectContextを設定することです
@property(strong, nonatomic) NSManagedObjectContext *managedObjectContext;
- (void)viewDidLoad
{
NSURL *filePath = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
filePath = [filePath URLByAppendingPathComponent:@"Locations"];
UIManagedDocument *document = [[UIManagedDocument alloc] initWithFileURL:filePath];
//Create if it doesn't exist
if (![[NSFileManager defaultManager] fileExistsAtPath:[filePath path]]) {
//Async save
[document saveToURL:filePath forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
if (success) {
self.managedObjectContext = document.managedObjectContext;
}
}];
} else if (document.documentState == UIDocumentStateClosed){
[document openWithCompletionHandler:^(BOOL success){
//Open it, don't need to refetch stuff
if (success) {
self.managedObjectContext = document.managedObjectContext;
}
}];
} else {
self.managedObjectContext = document.managedObjectContext;
}
}
次に、NSMangedObject サブクラスのカテゴリ メソッドを介して新しいオブジェクトを挿入します。
[Location createLocationWithName:@"Maui" inManagedObjectContext:self.managedObjectContext];
このコードを呼び出すだけです
Location *location = [NSEntityDescription insertNewObjectForEntityForName:@"Location" inManagedObjectContext:managedObjectContext];
[managedObjectContext save:nil];
今私が抱えている問題は、パブリック NSManagedObjectContext プロパティを持つ新しい ViewController にセグエし、prepareForSegue でこの managedObjectContext に設定すると、destinationViewController の NSFetchedResultsController がこの変更をすぐに取得しないことです。数回前に戻ると、最終的に上で作成した Location Maui が表示されます。新しいオブジェクトを managedObjectContext に挿入してから別のビュー コントローラーに渡すと、その変更が反映されない理由はありますか?
どんな洞察も大歓迎です。