Objective c Nssortdescriptor是否在排序后将数组的内容转换为整数?
给定以下代码,在第一次迭代中,日志将正常显示。对于第二次迭代,应用程序崩溃,并显示以下错误消息:Objective c Nssortdescriptor是否在排序后将数组的内容转换为整数?,objective-c,nsmutablearray,nsarray,nssortdescriptor,Objective C,Nsmutablearray,Nsarray,Nssortdescriptor,给定以下代码,在第一次迭代中,日志将正常显示。对于第二次迭代,应用程序崩溃,并显示以下错误消息: 019-11-07 09:54:08.156277+0100 xxxion[520:202084] iconNumberString : 1026 2019-11-07 09:54:12.160849+0100 xxxtion[520:202084] [self.iconNumbers lastObject]) : 1026 2019-11-07 09:54:24.598805+0100 xxxio
019-11-07 09:54:08.156277+0100 xxxion[520:202084] iconNumberString : 1026
2019-11-07 09:54:12.160849+0100 xxxtion[520:202084] [self.iconNumbers lastObject]) : 1026
2019-11-07 09:54:24.598805+0100 xxxion[520:202084] -[__NSSingleObjectArrayI addObject:]: unrecognized selector sent to instance 0x2824a3fd0
(lldb)
nssortdescriptor使用了:
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"intValue" ascending:YES];
要解决这个问题:
1-由于我认为nssortdescriptor会按照nssortdescriptor中指定的键将数组内容转换为整数,因此添加了以下日志:
NSLog(@“[self.iconNumbers lastObject]):%i“,[self.iconNumbers lastObject]);
检查值是否已转换为整数
问题是:
1-nssortdescriptopn是否将NSArray的内容转换为nssordescriptor指定的整数-initWithKey:@“intValue”-
这条线是2-4码_
self.iconNumbers = (NSMutableArray *)[self.iconNumbers
sortedArrayUsingDescriptors:@[sortDescriptor]];
为什么更改不应该直接应用于-self.iconnumbers-??为什么我必须再次将右手边的结果分配给同一个-self.iconnumber
代码:
For loop
[self.iconNumbers addObject:iconNumberString];
self.iconNumbers = (NSMutableArray *)[self.iconNumbers sortedArrayUsingDescriptors:@[sortDescriptor]];
NSLog(@"iconNumberString : %@", iconNumberString);
NSLog(@"[self.iconNumbers lastObject]) : %@", [self.iconNumbers lastObject]);
NSLog(@"[self.iconNumbers lastObject]) : %i", [self.iconNumbers lastObject]);//added for testing after received the crash
End of loop
sortedarray使用描述符:
返回NSArray
。它不是应用于自身,而是应用于“副本”并返回已排序的副本
施法,即做(NSMutableArray*)某件事
不是魔法。它不会将NSArray
转换为NSMutableArray
。它只是告诉编译器,不要害怕,我告诉你这是一个NSMutableArray
,下次再这样对待它,相信我(你错了)
或者直接使用排序描述符:
,或者将(NSMutableArray*)
替换为[[NSMutableArray alloc]initWithArray:
For loop
[self.iconNumbers addObject:iconNumberString];
self.iconNumbers = [[NSMutableArray alloc] initWithArray:[self.iconNumbers sortedArrayUsingDescriptors:@[sortDescriptor]]];
End of loop
或
其余的:
它将使用sortDescriptor作为排序的“转换”,但不会用转换替换该值。
想象一下,您有一个如下所示的NSDictionary数组:@{“key1”:@“Hello”、@“key2”:@“Hi”}
,设置描述符不会用key1(Hello)的值替换每个字典
最后,您只能在
NS(可变)数组中有一个NSObject
,没有原语。然后,它最多只能是一个NSNumber
封装Int
排序数组使用描述符:
返回一个NSArray.Casting,即执行(NSMutableArray*)有些东西不是魔法。它不会将NSArray
转换成NSMutableArray
。它只是告诉编译器,不要害怕,我告诉你这是NSMutableArray
,相信我(你错了)。或者直接使用或使用描述符:
,或者用替换(NSMutableArray*)
[[NSMutableArray alloc]initWithArray:
For loop
[self.iconNumbers addObject:iconNumberString];
[self.iconNumbers sortUsingDescriptors:@[sortDescriptor]];
End of loop