相关疑难解决方法(0)

带谓词的NSFetchedResultsController忽略从不同NSManagedObjectContext合并的更改

我正在使用NSFetchedResultsController具有谓词的表视图内容:

[NSPredicate predicateWithFormat:@"visible == %@", [NSNumber numberWithBool:YES]]
Run Code Online (Sandbox Code Playgroud)

在后台线程使用单独NSManagedObjectContext我更新几个实体并将其visible值更改NO为YES.保存,合并主线程中的更改NSManagedObjectContext.但是,NSFetchedResultsController的fetchedObjects没有改变.控制器也不会调用-controller:didChangeObject:...委托.如果实体在主线程上以相同的方式更新(我的测试应用程序调用相同的方法),一切都按预期工作.

通知也NSUpdatedObjectsKey包含这些对象.

目前我发现的唯一解决方案是呼叫每个NSUpdatedObjectsKey实体:

NSManagedObjectContext *context = ... // main thread context
[context existingObjectWithID:[object objectID] error:nil]
Run Code Online (Sandbox Code Playgroud)

此问题仅适用于先前与谓词不匹配的更新对象.

我错过了一些明显的东西吗

core-data nspredicate nsfetchedresultscontroller ios

27
推荐指数
1
解决办法
6427
查看次数

NSFetchedResultsController在更新到非获取的NSManagedObject之后不调用controllerDidChangeContent:

  1. 我填充和save:初始NSManagedObjectContext
  2. 设置NSFetchedResultsController一个不同的NSManagedObjectContext,过滤boolean"show"属性.
  3. 最后更新另一个"显示" NSManagedObjectContext和save:.

我预计,这一点应引起我NSFetchedResultsController打电话NSFetchedResultsControllerDelegate的controllerDidChangeContent:.我从来没有接到那个电话.NSFetchedResultsController谓语忽略的变化,从不同的NSManagedObjectContext合并的接受的答案表明,除了controllerDidChangeContent:,我应该得到的NSManagedObjectContextObjectsDidChangeNotification,但我不接受,要么.

完整的代码示例包含在下面和github上.我已经向Apple提交了雷达.

@interface HJBFoo : NSManagedObject

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSNumber *show;

@end

@interface HJBAppDelegate () <NSFetchedResultsControllerDelegate>

@property (nonatomic, strong) NSPersistentStoreCoordinator *persistentStoreCoordinator;
@property (nonatomic, strong) NSManagedObjectContext *initialManagedObjectContext;
@property (nonatomic, strong) NSManagedObjectContext *fetchedResultsControllerManagedObjectContext;
@property (nonatomic, strong) NSFetchedResultsController *fetchedResultsController;

@end

@implementation HJBAppDelegate

#pragma mark …
Run Code Online (Sandbox Code Playgroud)

core-data objective-c nsfetchedresultscontroller ios

13
推荐指数
1
解决办法
5846
查看次数