私はエラーEXC_BAD_ACCESS
が一般的に意味するものを理解していますが、私の場合は何が起こっているのか困惑しています。EXC_BAD_ACCESS with sortUsingComparator
私は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を経由して渡されたパラメータのいずれかを記録しているコンパレータの2行目、上の悪いアクセススレッドを取得します。しかし、私がinsertItem
に渡しているクラスのインスタンスは、この問題がなければどこからでもアクセスできます。したがって、コンパイラなしでitems
のプロパティに挿入できるので、正しくインスタンス化されています。私はここで何が欠けていますか?
詳細。私は実際に、私はあなたが上記のコードに応じていくつかの仮定を行うことができます
@property (strong, atomic) NSComparator sortWithThisComparator;
どのようにブロックをプロパティとして保存しますか?あなたはそれを質問に追加することができますかもしあればセッターの実装も追加できますか? – Alistra
@Alistra明示的なセッターを作成せず、むしろこのプロパティープロパティーを設定しました。(強い、アトミック)NSComparator sortWithThisComparator; – sunny