首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >刷新引用ManagedObjectContext

刷新引用ManagedObjectContext
EN

Stack Overflow用户
提问于 2012-06-13 05:47:25
回答 2查看 3.2K关注 0票数 4

在我iOS应用程序中,我有一个核心数据,我注意到,有时,在特定视图中,当我从核心数据检索信息时,并不总是最新的,我可以很好地解释:

如果我更新核心数据中的一些值,然后在特定视图中查看这些信息,这些信息不是最新的,现在我展示了如何访问我的数据库:

.h

代码语言:javascript
复制
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;

.m

代码语言:javascript
复制
@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];

....

然后我在表视图中显示我的信息,一切都很好,只有一个问题,有时我在另一个视图中所做的更新似乎没有在这个视图中读取,但如果我关闭应用程序,然后从后台关闭它,然后我重新打开它,我已经正确地将更新保存在核心数据中,所以我认为问题出在这个视图中,可能我有一个核心数据的旧引用,而不是更新版本,可能问题是这样的:

代码语言:javascript
复制
if (managedObjectContext == nil) {

    managedObjectContext = [(AppDelegate *) [[UIApplication sharedApplication] delegate] managedObjectContext];

}

仅当变量managedObjectContext为空时才会刷新,因此仅当视图为deallocated...so never时才会刷新,因为我的根视图控制器之一在UITabbarController中,所以我的问题是,如何才能访问核心数据以始终具有其更新版本?

EN

回答 2

Stack Overflow用户

发布于 2012-06-13 13:43:01

不需要刷新上下文,只需调用[managedObjectContext save];等managedObjectContext上的保存方法,或者如果您使用多个托管对象上下文,则应该合并上下文所做的更改

票数 1
EN

Stack Overflow用户

发布于 2012-06-13 06:24:03

在数据库类的实现中,您可以这样做

代码语言:javascript
复制
-(id) initWithContext: (NSManagedObjectContext *)managedObjContext {
    self = [super init];
    [self setManagedObjectContext:managedObjContext];
    return self;    
}

传递并设置managedObjContext

在您的应用程序委托中,当调用数据库类时,应该是这样的

代码语言:javascript
复制
database = [[Database alloc] initWithContext:self.managedObjectContext];

然后你就可以像这样访问数据库了

代码语言:javascript
复制
- (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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11005369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档