gpt4 book ai didi

ios - sortedArrayUsingSelector 导致 SIGABRT

转载 作者:行者123 更新时间:2023-11-28 22:15:56 27 4
gpt4 key购买 nike

我正在使用 sortedArrayUsingSelector 对我的数组进行排序。

我这样调用它:

NSArray *sortedArray;
SEL sel = @selector(intSortWithNum1:withNum2:withContext:);
sortedArray = [_myObjs sortedArrayUsingSelector:sel];

定义如下:

- (NSInteger) intSortWithNum1:(id)num1 withNum2:(id)num2 withContext:(void *)context {
CLLocationCoordinate2D c1 = CLLocationCoordinate2DMake([((myObj *)num1) getLat], [((myObj *)num1) getLong]);
CLLocationCoordinate2D c2 = CLLocationCoordinate2DMake([((myObj *)num2) getLat], [((myObj *)num2) getLong]);

NSUInteger v1 = [self distanceFromCurrentLocation:(c1)];
NSUInteger v2 = [self distanceFromCurrentLocation:(c2)];
if (v1 < v2)
return NSOrderedAscending;
else if (v1 > v2)
return NSOrderedDescending;
else
return NSOrderedSame;
}

当我运行我的应用程序时,我在主程序中遇到 thread1 SIGABRT 错误。

有什么想法吗?提前致谢。

注意:我已经试过了:

NSArray *sortedArray = [[NSArray alloc] init];

它没有解决任何问题。

最佳答案

选择器应该由被比较的对象实现,并且应该只接受一个参数,即另一个相同类型的对象。

例如,在 NSArray 中,有一个使用 caseInsensitiveCompare 比较字符串的例子。那是因为 NSString 实现了 caseInsensitiveCompare。

如果您想到它...... sortedArrayUsingSelector 怎么知道将什么作为参数传递给示例中的函数?

编辑:这意味着您用作“排序选择器”的函数必须是由数组中的对象定义的函数。假设如果你的数组包含 Persons,你的数组必须像这样排序:

sortedArray = [_myObjs sortedArrayUsingSelector:@selector(comparePerson:)];

comparePerson 消息将被发送到您的数组中的对象(Persons),因此在您的 Person 类中您必须有一个名为 comparePerson 的函数:

- (NSComparisonResult)comparePerson:(Person *)person
{
if (self.age == person.age)
return NSOrderedSame;
}

在此示例中,comparePerson 将自身 (self) 与参数 (person) 进行比较,如果两个人的年龄相同,则认为他们相等。如您所见,只要您编写正确的逻辑代码,这种比较和排序的方法就会非常强大。

关于ios - sortedArrayUsingSelector 导致 SIGABRT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21683049/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com