機能していないこのコードを修復するように依頼されました。これは一般的なバックグラウンド タスクです。
__weak NSManagedObjectContext *weakCtx=[CDC privateManagedObjectContext]; // convenient class+macro for obtaining a private context queue
__weak id weakSelf = self;
[weakCtx performBlock:^{
__strong id strongSelf = weakSelf;
__strong NSManagedObjectContext *ctx = weakCtx; // <-- nil
// more code following
];
この問題は、コードの後半でctx
nil になることによって発生します。ただし、ブロック内にブレークポイントを配置すると、weakCtx はまだ有効ですが、ctx は nil 値を取得し、ブロックが失敗することがわかります。
反対に、weakSelf は正しく割り当てられており、コードの残りの部分で機能します。
何が欠けていますか?