sortUsingComparator 在 iPad 上排序不正确 4
sortUsingComparator sorting incorrectly on iPad 4
我公司有 iPad 台 4 台和 iPad 台 Air 2 台,我们正在为这些设备部署自定义应用程序。应用程序 运行 在 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 到 运行 方法不正确。两种设备类型都是 运行ning iOS 10.2.1 或 10.3,并且该应用是在 Xcode 8.3
中构建的
上面代码中的问题是您将 NSNumber
与 >
运算符进行比较。这是行不通的,因为您正在比较 NSNumber
的指针的值!如果您知道类型并选择使用 [nsNumberInstance integerValue]
之类的方式提取它,则上述代码将起作用。或者您可以简单地选择使用 NSNumber
的 compare
方法。
我公司有 iPad 台 4 台和 iPad 台 Air 2 台,我们正在为这些设备部署自定义应用程序。应用程序 运行 在 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 到 运行 方法不正确。两种设备类型都是 运行ning iOS 10.2.1 或 10.3,并且该应用是在 Xcode 8.3
中构建的上面代码中的问题是您将 NSNumber
与 >
运算符进行比较。这是行不通的,因为您正在比较 NSNumber
的指针的值!如果您知道类型并选择使用 [nsNumberInstance integerValue]
之类的方式提取它,则上述代码将起作用。或者您可以简单地选择使用 NSNumber
的 compare
方法。