gpt4 book ai didi

ios - 被 NSMutableArray sortUsingDescriptors : exception 搞糊涂了

转载 作者:行者123 更新时间:2023-11-28 17:58:47 24 4
gpt4 key购买 nike

以下方法:

- (NSMutableArray*) timeSortedBegins {
NSMutableArray* begins = [self.spans valueForKey: @"begin"];
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey: @"cycleOffsetObject" ascending: YES];
[begins sortUsingDescriptors: @[sort]];
return begins;
}

抛出这个运行时异常:

2014-03-21 14:41:32.482 myValve[1741:60b] -[__NSArrayI sortUsingDescriptors:]: unrecognized selector sent to instance 0x16d7bc20
2014-03-21 14:41:32.484 myValve[1741:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI sortUsingDescriptors:]: unrecognized selector sent to instance 0x16d7bc20'

我使用断点说服自己 begins 数组确实充满了(在本例中为两个)WEAnchor* 对象。该对象实现了以下两个方法:

- (NSTimeInterval) cycleOffset {
return self.offset + (self.datum ? self.datum.cycleOffset : 0.0);
}

- (NSNumber*) cycleOffsetObject {
return [NSNumber numberWithDouble: self.cycleOffset];
}

老实说,我只添加了 cycleOffsetObject 包装器方法,因为我认为它可能无法处理非对象值,我使用的是 initWithKey: @"cycleOffset"在那之前。我没有在头文件中将它们声明为属性,它们只是访问器方法,而不是状态。那是问题所在吗?如果是,您如何按给定选择器的返回值排序?还是我只是错过了一些显而易见的事情?

最佳答案

正如@dtrotzjr 所说,听起来您的数组是不可变的,而不是可变的数组。

您可以使用 mutableCopy 创建一个可变副本,然后对该副本进行排序,或者使用 NSArray 方法 sortedArrayUsingDescriptors:(它对不可变数组进行操作,并返回内容的排序版本作为第二个不可变数组。)

要使用 mutableCopy,您的代码可能如下所示:

- (NSMutableArray*) timeSortedBegins {
NSMutableArray* begins = [[self.spans valueForKey: @"begin"] mutableCopy];
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey: @"cycleOffsetObject" ascending: YES];
[begins sortUsingDescriptors: @[sort]];
return begins;
}

关于ios - 被 NSMutableArray sortUsingDescriptors : exception 搞糊涂了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22570144/

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