在我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为空时才会刷新,因此仅当视图为deallocated...so never时才会刷新,因为我的根视图控制器之一在UITabbarController中,所以我的问题是,如何才能访问核心数据以始终具有其更新版本?
发布于 2012-06-13 13:43:01
不需要刷新上下文,只需调用[managedObjectContext save];等managedObjectContext上的保存方法,或者如果您使用多个托管对象上下文,则应该合并上下文所做的更改
发布于 2012-06-13 06:24:03
在数据库类的实现中,您可以这样做
-(id) initWithContext: (NSManagedObjectContext *)managedObjContext {
self = [super init];
[self setManagedObjectContext:managedObjContext];
return self;
}传递并设置managedObjContext
在您的应用程序委托中,当调用数据库类时,应该是这样的
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;
}https://stackoverflow.com/questions/11005369
复制相似问题