के साथ EXC_BAD_ACCESS मैं समझता हूं कि त्रुटि EXC_BAD_ACCESS
सामान्य रूप से क्या है, लेकिन मुझे इस मामले में क्या हो रहा है इसके बारे में परेशान है।sortCsingComparator
मेरे पास एक कस्टम क्लास है जिसमें NSComparator
संपत्ति sortWithThisComparator
है। कि संपत्ति उपयोगकर्ता द्वारा सेट किया जाता है, जब मैं उदाहरण के वर्ग संपत्ति सरणी items
में एक आइटम डालने मैं तुलनित्र का उपयोग प्रविष्टि स्थान निर्धारित करने के लिए:
- (void) insertItem:(id<NSCoding, CKArchivingItem>) item {
if (arrayObjectClassString && ![item isKindOfClass:NSClassFromString(arrayObjectClassString)]) {
[NSException raise:@"YOU MADE A MISTAKE" format:@"you tried to insert a %@ but I can only accept %@", [item class], arrayObjectClassString];
} else {
if (!sortWithThisComparator) {
[self.items addObject:item];
} else {
NSInteger newItemIndex = [self.items indexOfObject:item inSortedRange:NSMakeRange(0, [self.items count]) options:NSBinarySearchingFirstEqual usingComparator:sortWithThisComparator];
if (newItemIndex >= [self.items count]) {
[self.items addObject:items];
} else {
[self.items insertObject:item atIndex:newItemIndex];
}
}
}
}
सब कुछ ठीक काम करता है जब मैं एक तुलनित्र निर्धारित नहीं करते हैं, लेकिन मैं एक बुरा पहुँच त्रुटि मिलती है जब मैं तुलनित्र का उपयोग करते हैं:
typedef NSComparisonResult (^NSComparator)(id obj1, id obj2);
...
[[CKGenericSingletonSubclass sharedManager] setSortWithThisComparator: ^NSComparisonResult(CKGeneralizedItemSubclass *i1, CKGeneralizedItemSubclass *i2) {
NSLog(@"we are inside");
NSLog(@"here is the item 1 %@", i1);
NSLog(@"we are comparing this float %f to thisf loat %f", i1.gradeSchoolAverage, i2.gradeSchoolAverage);
if (i1.gradeSchoolAverage < i2.gradeSchoolAverage) {
return NSOrderedAscending;
} else if (i1.gradeSchoolAverage == i2.gradeSchoolAverage) {
return NSOrderedSame;
} else {
return NSOrderedDescending;
}
}];
मैं तुलनित्र, जो केवल मापदंडों NSComparator के माध्यम से पारित कर दिया है पेड़ों की कटाई की दूसरी पंक्ति पर बुरा पहुँच धागा मिलता है। फिर भी कक्षा उदाहरण मैं insertItem
पर जा रहा हूं, इस समस्या के बिना कहीं और सुलभ है, इसलिए मुझे पता है कि उन्हें ठीक से ठीक किया गया है और अन्यथा ठीक से पारित किया गया है क्योंकि मैं उन्हें items
संपत्ति के बिना तुलनात्मक रूप से ठीक कर सकता हूं। मुझे यहां क्या समझ नहीं आ रहा है?
और जानकारी। मैं NSComparator को
@property (strong, atomic) NSComparator sortWithThisComparator;
आप ब्लॉक को संपत्ति के रूप में कैसे स्टोर करते हैं? क्या आप इसे प्रश्न में जोड़ सकते हैं, अगर कोई भी सेटर कार्यान्वयन भी कर सकता है। – Alistra
@Alistra मैंने एक स्पष्ट सेटटर नहीं लिखा बल्कि इस संपत्ति की संपत्ति (मजबूत, परमाणु) एनएससीओम्परेटर सॉर्ट WithThisComparator सेट करें; – sunny