4

在我的 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 中的根视图控制器之一,所以我的问题是,我如何才能始终访问核心数据它的更新版本?

4

2 回答 2

1

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

于 2012-06-13T05:43:01.050 回答
0

在数据库类的实现上,你可以这样做

-(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;
}
于 2012-06-12T22:24:03.257 回答