私はNSSet
を含むクラスを持っています。そのオブジェクトは_collectibles
と呼ばれ、この方法では、私は、いくつかの処理を行うためにのようなものをそのセットのコピーを作成します奇妙なNSSetのコピークラッシュ
NSSet* collectibleCopy = [_collectibles copy];
[__NSPlaceholderSet initWithObjects:count:]: attempt to insert nil object from objects
私はに上記のコードを変更することで問題を解決しました:
NSMutableSet* collectibleCopy = [[NSMutableSet alloc] initWithCapacity: [_collectibles count]];
for (id thing in _collectibles) {
[collectibleCopy addObject: thing];
}
そして今、私は、もはやそのようなクラッシュを再現することはできません。私は[copy]
がより効率的であると賭けています。私はむしろそれを使用したいと思いますが、なぜそれが完全にうんざりしているのか理解できません!
更新:
NSBlockOperation* operation = [NSBlockOperation blockOperationWithBlock: ^{
[thing doStuff];
}];
[operationQueue addOperation: operation];
そして、私は基本的に行うことで、だったもの:フルコンテキストは説明のトンを取るだろうが、これを解決する私に鍵は、コードがこのように呼び出された、ということでした2つのスレッドで2つのスレッドを実行して、キューに入れてアプリをキャッチする:
operationQueue.maxConcurrentOperationCount = 1;
私は不可能だと思った。手掛かりは、2番目のスレッドが[NSAutoreleasePool drain]に入っていて、NSOperationQueueが必要なときにいつでもオートレリースの処理ができることを知ることができました。
私はあなたのバグを再現できませんでした。文脈のためにもう少しコードを投稿できますか? – aLevelOfIndirection
は、コアデータの関係をコピーするセットですか? –
コンテキスト全体が膨大な量のコードを必要とします。 :) – GoldenBoy