サーバーと iOS デバイスの間でデータを同期するマルチスレッド アプリがあります。
同期は別のスレッドで行われます。NSManagedObjectContextにシングルトン パターンを使用し、メイン スレッドで作成します。スレッドの問題が発生し始めました。調査の結果、初期化されたスレッドの外でコンテキストを使用すべきではないことがわかりました。そのため、メイン スレッドのコンテキストで init を呼び出し、それを同期スレッドで使用していました。それを修正するために、次のことを行いました。
NSPersistentStoreCoordinatorを返すグローバル メソッドを作成し、同期スレッドでこのコーディネーターを使用して新しいコンテキストを作成します。これにより、スレッド化の問題は解消されましたが、他の奇妙な動作が発生するようになりました。
私の同期スレッドでは、executeFetchRequestメソッドを呼び出し、結果の配列を他のメソッドに返します。デバッグすると、93 個のレコードがあり、すべてがデータで満たされていることがわかります。次に、返されたメソッドの配列をチェックしますが、まだ 93 レコードを取得していますが、列にはすべて nil 値があります。
ここにコードがあります
+(NSArray *) GetAllRowsInTable:(NSString *) tableName
{
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[context setPersistentStoreCoordinator:[Globals GetPersistentStoreCoordinator]];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:tableName inManagedObjectContext:context]];
NSError *error;
NSArray *results = [context executeFetchRequest:request error:&error];
return results;
}
なぜこれが起こっているのか誰にも分かりますか?