Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Core data 传递给ViewController的NSManagedObject不反映所有更新_Core Data_Nsfetchedresultscontroller_Nsmanagedobjectcontext - Fatal编程技术网

Core data 传递给ViewController的NSManagedObject不反映所有更新

Core data 传递给ViewController的NSManagedObject不反映所有更新,core-data,nsfetchedresultscontroller,nsmanagedobjectcontext,Core Data,Nsfetchedresultscontroller,Nsmanagedobjectcontext,在我的第一个视图控制器中,我要做的是从viewDidLoad中的UIMangedDocument设置NSManagedObjectContext @property(strong, nonatomic) NSManagedObjectContext *managedObjectContext; - (void)viewDidLoad { NSURL *filePath = [[[NSFileManager defaultManager] URLsForDirectory:NSDocu

在我的第一个视图控制器中,我要做的是从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;
     }
 }
然后通过category方法在NSMangeObject子类上插入一个新对象

[Location createLocationWithName:@"Maui" inManagedObjectContext:self.managedObjectContext];
这就是所谓的代码

Location *location = [NSEntityDescription insertNewObjectForEntityForName:@"Location" inManagedObjectContext:managedObjectContext];
[managedObjectContext save:nil];
现在我遇到的问题是,当我切换到一个具有公共NSManagedObjectContext属性的新ViewController,并在prepareForSegue中将其设置为此managedObjectContext时,destinationViewController中的NSFetchedResultsController不会立即接受此更改。在我来回导航了几次之后,它最终看到了我在上面创建的毛伊岛的位置。你知道为什么在managedObjectContext中插入一个新对象,然后将其传递给另一个视图控制器并不能反映这种变化吗


非常感谢您的任何见解。

如果您的创建方法包含名称,您至少应该设置此属性(否则它将丢失)。因此,您的创作实施的第二行:

location.name = name; // name is passed to the method
为了确保立即更新第二个视图控制器的“获取结果”控制器,您可以在创建FRC时将
cacheName
设置为
nil
。如果您有很多记录,并且认为需要缓存,可以在
视图中执行此操作,该视图将显示

[self.fetchedResultsController performFetch:&error];

我已经实现了所有这些,但是在转换到另一个视图控制器时,它仍然没有看到我最近插入的内容。请参见上文的“重新加载数据”。如果仍然没有运气,确保你保存了你期望看到的东西。通过
sqlite3
命令行工具或Firefox的SQLItemManager检入物理数据库。