【发布时间】:2017-04-03 20:18:13
【问题描述】:
我的公司有许多 iPad 4s 和 iPad Air 2s,我们正在为这些设备部署一个自定义应用程序。该应用程序在 iPad Air 2s 上运行良好,但 iPad 4s 有一个奇怪的错误。 sortUsingComparator 方法对我的数组进行了错误的排序。
示例代码:
-(void)sortArraysOfStrings:(NSMutableArray*)stringArray andNumbers:(NSMutableArray*)numbersArray onCompletion:(void(^)(NSMutableArray*,NSMutableArray*))callback {
//sort here
[stringArray sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
[numbersArray sortUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
NSNumber *num1 = (NSNumber*)obj1;
NSNumber *num2 = (NSNumber*)obj2;
if (num1 > num2) {
return (NSComparisonResult)NSOrderedDescending;
}else {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}];
//return arrays in completion handler
callback(nameArray, targetArray);
}
知道有什么问题吗?我不知道是什么导致 iPad 4 错误地运行该方法。两种设备类型都运行 iOS 10.2.1 或 10.3,并且该应用是在 Xcode 8.3 中构建的
【问题讨论】:
-
您是否在调试器中创建了断点并确保
numbersArray不为零? -
@SamB 是的,numbersArray 填充了与 stringArray 相同数量的元素
-
首先,您不应该使用
>来比较 NSNumber。你应该使用[num1 compare:num2]。另外,以下是否有效?NSMutableArray *arr = [@[@5, @2, @5, @4] mutableCopy]; NSArray *result = [arr sortedArrayUsingComparator:^NSComparisonResult(NSNumber *a, NSNumber *b) { return [a compare:b]; }]; NSLog(@"%@", result); -
@SamB huh 仔细检查后 ipad4 并没有跳过该方法,它们只是错误地排序/进行比较,我仍然觉得奇怪的是它只影响 ipad4 而不是 ipad air2 .你是对的,比较方法解决了我的问题。我编辑了我的问题以反映我的观察。把你的评论变成我会接受的答案。
标签: ios objective-c ipad methods