将sortedArrayUsingComparator与大量对象一起使用时的EXC_BREAKPOINT

时间:2017-10-18 20:17:13

标签: ios objective-c cocoa-touch memory-management nsarray

我试图对一组进行排序,但大部分时间都能正常运行。但是,当我开始在旧的iPhone 5c上使用我的应用程序并且很多对象进入集合时,我最终会遇到此错误:

EXC_BREAKPOINT (code=EXC_ARM_BREAKPOINT, subcode=0xdefe)

这里是代码加堆栈跟踪:

Alt text

if(manager.allBeacons){
    NSSet *beacons = [manager.allBeacons copy];
    NSSet *filteredSet = [[NSSet alloc] initWithSet:[beacons filteredSetUsingPredicate:predicate]];
    if(filteredSet){
        //NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"RSSI" ascending:NO];
        //NSArray *sortDescriptors = [NSArray arrayWithObject:descriptor];
        //NSArray *sortedArray = [[NSArray alloc] initWithArray:[filteredSet.allObjects sortedArrayUsingDescriptors:sortDescriptors]];
        NSArray *sortedArray = [filteredSet.allObjects sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
            if([obj1 isKindOfClass:[BLUSBeacon class]] && [obj2 isKindOfClass:[BLUSBeacon class]]){
                BLUSBeacon *beacon1 = obj1;
                BLUSBeacon *beacon2 = obj2;

                if(beacon1.RSSI.integerValue > beacon2.RSSI.integerValue){
                    return (NSComparisonResult)NSOrderedAscending;
                }

                if(beacon1.RSSI.integerValue < beacon2.RSSI.integerValue){
                    return (NSComparisonResult)NSOrderedDescending;
                }
            }
            return (NSComparisonResult)NSOrderedSame;
        }];
        if(sortedArray){
            self.beacons = sortedArray;
            [self.tableView reloadData];
        }
    }
}

以下是stacktrace中的最后一步,以防它出于任何目的:

Alt text

正如你所看到的,我最初尝试使用描述符进行排序,但这使得它更快崩溃。

有什么想法吗?

0 个答案:

没有答案