मेरे पास एक कक्षा है जिसमें NSSet
है। यही कारण है कि वस्तु _collectibles
कहा जाता है, और एक विधि में, मैं कुछ प्रसंस्करण करने के लिए की तरह कुछ है कि सेट की एक प्रतिलिपि बनाने,:विचित्र एनएसएससेट क्रैश की प्रतिलिपि
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];
और है कि मैं था, मूल रूप से एक बनाने के द्वारा चीजें धीमी की गुच्छा, एक कतार thusly प्रारंभ के लिए 2 धागे चल 2 धागे के साथ एप्लिकेशन को पकड़ने:
operationQueue.maxConcurrentOperationCount = 1;
कौन सा मैं असंभव सोचा। सुराग यह था कि दूसरा धागा [NSAutoreleasePool drain] में था, जिसने मुझे यह जानने के लिए प्रेरित किया कि NSOperationQueue जब भी चाहें autorelease सामान कर सकते हैं। आप के लिए
मैं आपकी बग को पुन: उत्पन्न करने में सक्षम नहीं था। क्या आप संदर्भ के लिए थोड़ा और कोड पोस्ट कर सकते हैं? – aLevelOfIndirection
यह सेट है कि आप कोर डेटा रिलेशनशिप की प्रतिलिपि बना रहे हैं? –
पूरे संदर्भ के लिए कोड की एक बड़ी ढेर की आवश्यकता होगी। :) – GoldenBoy