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 のルート ビュー コントローラーの 1 つであるため、私の質問は、コア データにアクセスして常に保持する方法です。それのアップデート版?

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 に答える