0

NSPrivateQueueConcurrencyType スレッドで実行されるブロックにスレッド コンテキスト固有のデータを格納する必要があります。ブロック内でやりたいことの例を次に示します (保存するコンテキスト データの簡単な例を示しますが、要点はわかります)。

dispatch_queue_t myQueue = dispatch_get_current_queue();
NSMutableDictionary *myContext = @{@"Context": @"ContextData"};
dispatch_set_context(myQueue, (__bridge_retained void *)myContext);

しかし、問題は、現在のキューへの参照を取得するために使用される関数 dispatch_get_current_queue() が非推奨であるため、使用したくないことです。このキューへの参照を取得するための他のメカニズムが見当たらないので、それに対してコンテキスト データを保存できます。Appleがdispatch_get_current_queue()を廃止したかどうか疑問に思っています。なぜなら、彼らは私がやろうとしていることを人々にやらせたくないからです.これに関するドキュメントの警告は見当たりません. 1.これが悪いことである理由を知っていますか? 2. スレッドがたまたまシステム提供の CoreDataPrivateQueue タイプである場合に、使用されるコードも機能するはずの現在のスレッドに関連するコンテキスト データを保存する他の方法を知っていますか?

4

1 に答える 1

0

OK、代わりに NSThread と同等の呼び出しを行うことができます。タイプ NSPrivateQueueConcurrencyType の単一システム生成 MOC で、これは機能します。少し作業した後、スレッドの有効期間に関連する問題が発生した場合は更新します。

[moc performBlockAndWait:^{
    NSThread *currentThread = [NSThread currentThread];
    NSMutableDictionary *myThreadDict = currentThread.threadDictionary;
    [myThreadDict setObject:@"Some thread data" forKey:@"IRThreadData"];
}];
[moc performBlockAndWait:^{
    NSThread *currentThread = [NSThread currentThread];
    NSMutableDictionary *myThreadDict = currentThread.threadDictionary;
    NSLog(@"Retreived dictionary value = %@", [myThreadDict objectForKey:@"IRThreadData"]);
}];
于 2013-09-11T11:07:05.747 に答える