0

そのため、iOS アプリケーションで MagicalRecord を使用していて、非常に奇妙な問題が発生しています。私は次の呼び出しを使用しています:

[MagicalRecord saveUsingCurrentThreadContextWithBlockAndWait:^(NSManagedObjectContext *localContext) {
/* look up object in localContext and change property value */ }];

後でその新しい値を取得する(両方ともメインスレッドで)

[ObjectName MR_findAll]. 

ただし、約 3 分の 1 の確率で、古い値が報告されています。Core Data が古いバージョンをメモリのどこかにキャッシュしているかのようで、「時々」それを取得し、他の場合は取得しません。

4

2 に答える 2

0

親が保存していても、異なるスレッドMagicalRecordのその他のキャッシュが判明し、それらの子は更新されませんでした。MOCsMOCsMOC

したがって、 NSManagedObjectContext(MagicalThreading)でこれを変更します:

NSMutableDictionary *threadDict = [[NSThread currentThread] threadDictionary];
NSManagedObjectContext *threadContext = [threadDict objectForKey:kMagicalRecordManagedObjectContextKey];

if (threadContext == nil)
{
  threadContext = [self MR_contextWithParent:[NSManagedObjectContext MR_defaultContext]];
  [threadDict setObject:threadContext forKey:kMagicalRecordManagedObjectContextKey];
}
return threadContext;

これに:

NSMutableDictionary *threadDict = [[NSThread currentThread] threadDictionary];
NSManagedObjectContext *threadContext = [threadDict objectForKey:kMagicalRecordManagedObjectContextKey];
threadContext = [self MR_contextWithParent:[NSManagedObjectContext MR_defaultContext]];
[threadDict setObject:threadContext forKey:kMagicalRecordManagedObjectContextKey];

return threadContext;

子コンテキストが更新されない理由については、私にはわかりません。しかし、それを行うと、すべてが再び機能しました。

于 2013-11-11T03:55:43.790 に答える