在我的iOS应用程序中我有一个核心数据,我注意到有时,在特定视图中,当我从核心数据中检索信息时,并不总是最新的,我解释得很好:
如果我更新核心数据中的某个值,然后我进入特定视图查看此信息,该信息不是最新的,现在我将展示我如何访问我的数据库:
·H
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
的.m
@synthesize managedObjectContext;
- (NSArray *)sortInformation{
if (managedObjectContext == nil) {
managedObjectContext = [(AppDelegate *) [[UIApplication sharedApplication] delegate] managedObjectContext];
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
....
然后我在表格视图中显示我的信息,所有工作完美,只有这个问题,有些时候似乎我在另一个视图中完成的更新未在此视图中读取,但如果我关闭应用程序,我从背景关闭它,然后我重新打开它一切正常...所以我已正确保存核心数据更新,所以我认为问题是在这个视图中,也许我有一个旧的参考核心数据而不是更新版本,可能问题是:
if (managedObjectContext == nil) {
managedObjectContext = [(AppDelegate *) [[UIApplication sharedApplication] delegate] managedObjectContext];
}
只有当变量managedObjectContext为nil才刷新,所以只有在视图被解除分配时...所以永远不要,因为我是UITabbarController中的一个根视图控制器,所以我的问题是,我如何访问核心数据总是有它的更新版本?
答案 0 :(得分:1)
无需刷新上下文只需在[managedObjectContext save];
这样的托管对象上调用save方法
或者如果您使用多个托管对象上下文,则应合并上下文所做的更改
答案 1 :(得分:0)
关于数据库类的实现,你可以这样做
-(id) initWithContext: (NSManagedObjectContext *)managedObjContext {
self = [super init];
[self setManagedObjectContext:managedObjContext];
return self;
}
managedObjContext传递并设置
在你的app委托调用数据库类时,它应该是这样的
database = [[Database alloc] initWithContext:self.managedObjectContext];
然后您可以像这样访问数据库
- (NSArray *)sortInformation {
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSMutableArray *mutableFetchResults = [[[managedObjectContext_ executeFetchRequest:request error:&error] mutableCopy] autorelease];
[request release];
return mutableFetchResults;
}