这是我AppDelegate.m
中的代码:
-(IBAction)fetch:(id)sender{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Foo" inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title == 'some title'"];
[fetchRequest setPredicate:predicate];
NSError *error = nil;
NSArray *fetchedObjects = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {NSLog(@"Error: %@", error);}
NSMutableArray *fooArray = [[NSMutableArray alloc]init];
for (Foo *f in fetchedObjects) {
//here another fastenum for a to-many relationship
for(Bar *b in f.relationship){
[fooArray addObject:b.title];
}
}
每次执行获取操作时,即使我通过UI更改了app.storedata文件并检查了finder中的更改,结果也一直相同,直到我退出应用程序。重新启动后,获取结果是最新的并与app.storedata文件对齐。 fooArray计数总是相同的,无论我是在实体中添加一些条目还是coredata保存所有内容。 我试过[fetchRequest setIncludesPendingChanges:YES],但它不会影响行为。 如何在应用程序运行时更新获取结果?
更新:我通过此解决方案解决了问题:
-(IBACTION)fetch:(id)sender{
_managedObjectContext = nil;
_persistenStoreCoordinator = nil;
//rest of the code...
这种解决方案是最终的解决方案吗?是否有更“正确”的方法来解决这个问题?