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