在我的第一个视图控制器中,我正在做的是从viewDidLoad中的UIMangedDocument设置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不会立即获取此更改。在我向后导航几次后,它最终会看到我在上面创建的毛伊岛位置。为什么将新的Object插入到managedObjectContext然后将其传递给另一个视图控制器的任何想法都没有反映出这种变化?
非常感谢任何见解。
答案 0 :(得分:0)
如果创建方法包含名称,则至少还应设置此属性(否则将丢失)。所以创作的第二行是:
location.name = name; // name is passed to the method
为了确保立即更新第二个视图控制器的获取结果控制器,您可以在创建FRC时将cacheName
设置为nil
。如果您有大量记录并认为需要缓存,则可以在viewWillAppear
:
[self.fetchedResultsController performFetch:&error];