我有一个这样的数据库方案:
我像这样初始化我的fetchcontroller:
NSLog(@"%s Only tracked POI query", __PRETTY_FUNCTION__);
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"POI" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"rank.tracked == %@",[NSNumber numberWithBool:YES]];
[fetchRequest setPredicate:predicate];
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
[fetchRequest setSortDescriptors:@[sort]];
[fetchRequest setFetchBatchSize:20];
result = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:context sectionNameKeyPath:nil
cacheName:nil];
我有一个像你在屏幕截图上看到的Rank实体。当我将tracked(boolean)设置为YES时,这个fetchcontroller应该显示新的POI。因为我检索了Rank.tracked == YES的所有POI。
它有效,但总是落后一步。我点击跟踪排名没有任何反应,当我点击另一个Rank来跟踪时,tableview会更新前一次点击的更改。
我的tableview正在扩展https://gist.github.com/CloudNiner/8681866这个stanford类。
有人可以解释一下为什么它不会马上更新吗?我在SO Changing a managed object property doesn't trigger NSFetchedResultsController to update the table view
上找到了这个但我不知道它对我有什么帮助。