在核心数据中使用多个上下文时出错133000

我花了好几天的时间来尝试解决这个问题的所有可能的解决scheme,但似乎没有任何解决方法。

我运行一个像这样的后台线程:

[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) { Media *localMedia = [media inContext:localContext]; UIImage *image = localMedia.thumbnail; dispatch_async(dispatch_get_main_queue(), ^{ [thumbnails setObject:image forKey:[NSNumber numberWithInt:i]]; [contentDict setObject:thumbnails forKey:@"MediaItems"]; [cell.entryView setNeedsDisplay]; }); }]; 

或者像这样:

 dispatch_queue_t cellSetupQueue = dispatch_queue_create("com.Journalized.SetupTimelineThumbnails", NULL); dispatch_async(cellSetupQueue, ^{ NSManagedObjectContext *newMoc = [[NSManagedObjectContext alloc] init]; NSPersistentStoreCoordinator *coordinator = [NSManagedObjectContext contextForCurrentThread].persistentStoreCoordinator; [newMoc setPersistentStoreCoordinator:coordinator]; NSNotificationCenter *notify = [NSNotificationCenter defaultCenter]; [notify addObserver:self selector:@selector(mergeChanges:) name:NSManagedObjectContextDidSaveNotification object:newMoc]; Media *localMedia = [media inContext:[NSManagedObjectContext contextForCurrentThread]; UIImage *image = localMedia.thumbnail; dispatch_async(dispatch_get_main_queue(), ^{ [thumbnails setObject:image forKey:[NSNumber numberWithInt:i]]; [contentDict setObject:thumbnails forKey:@"MediaItems"]; [cell.entryView setNeedsDisplay]; }); }]; 

这两个都给我一个UIImage返回为零对象, Cocoa Error 133000崩溃。

我已经删除了所有其他的后台线程代码,并保存在主线程之前,直接确保。 在主线程上运行上面的代码也可以,但冻结了我的用户界面。 尽pipe所有这些努力,上述代码每次崩溃。

我不知道该怎么做才能做到这一点。

编辑:

我的问题,具体来说就是我如何在不崩溃的情况下完成这项工作? 这似乎是来自另一个不存在的1个上下文的对象的问题,但是我如何使它们存在于另一个上下文中呢?

请记住,MR_inContext:方法正在使用[NSManagedObjectContext objectWithID:]方法。 你应该看看那里,以确保你的对象有:

1)在进入第一个代码块中的背景上下文/块之前被保存2)该方法返回一些有用的东西

我也不确定你如何设置你的缩略图属性。 理想情况下,只要您有NST可变形代码写入就没有关系(互联网上有示例显示如何使用可变形属性将UIImage保存在核心数据中)

另外,你的代码应该是这样的:

 UIImage *image = nil; [MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) { Media *localMedia = [media inContext:localContext]; //remember, this looks up an existing object. If your context is a child of a parent context that has contains this, the localContext should refresh the object from the parent. //image processing/etc image = localMedia.thumbnail; } completion:^{ [thumbnails setObject:image forKey:@(i)]; //new literals are teh awesome contentInfo[@"MediaItems"] = thumbnails; //as is the new indexer syntax (on the latest compiler) [cell.entryView setNeedsDisplay]; }]; 

快速回答:

NSManagedObjectReferentialIntegrityError = 133000,//尝试引发一个指向不存在的对象的错误(我们可以看到商店,我们看不到对象)

编辑:这是很难从代码中看到的东西。 什么是pipe理对象?

我想问题是你在另一个上下文中使用来自一个上下文的临时对象。