コア データ アプリケーションの一部のコードをコントローラーからモデルに移動中です。
定期的に行う特定のフェッチ要求に対して NSManagedObjectID を返すメソッドを作成しました。
+ (NSManagedObjectID*)teamProjectWithProjectId:(NSNumber *)projectId inContext:(NSManagedObjectContext*)context
{
NSFetchRequest *teamRequest = [[NSFetchRequest alloc] initWithEntityName:@"TeamProject"];
NSPredicate *teamPredicate = [NSPredicate predicateWithFormat:@"teamProjectId == %@",projectId];
teamRequest.predicate = teamPredicate;
TeamProject *teamProject = [[context executeFetchRequest:teamRequest error:nil] lastObject];
if (teamProject)
{
return [teamProject objectID];
}
else
{
return nil;
}
return nil;
}
そして今、私がこれを行う方法を使用する必要がある場所ならどこでも:
NSManagedObjectID *teamProjectMoId = [TeamProject teamProjectWithProjectId:projectID];
TeamProject *currentProject = nil;
if (teamProjectMoId)
{
currentProject = (TeamProject*)[self.managedObjectContext objectWithID:teamProjectMoId];
}
NSManagedObjectID はスレッド セーフですが、NSManagedObject はスレッド セーフではありません。そして、かなりの量のコードをコントローラー クラスからモデル カテゴリに移動できることをうれしく思います。
しかし、これでは十分ではありません。スレッドセーフを尊重する方法で、たった 1 行のコードで NSManagedObject にアクセスしたいと本当に思っています。私の理想は、次のようなものを書くことができることです:
TeamProject *currentProject = [TeamProject magicalMethodThatHandlesThreadSafety];
これは可能ですか?または、NSManagedObject のクリーンなアクセサ メソッドを作成するための戦略を持っている人はいますか?