Objective c 从plist 1-10对NSString进行排序

Objective c 从plist 1-10对NSString进行排序,objective-c,ios,sorting,plist,Objective C,Ios,Sorting,Plist,我想排序的plist有问题。这是一个高分,我想排序的球员排名。问题是排名是一个字符串,这会破坏排序(我得到1,10,2,3,4,5,6,7,8,9) 我需要用正确的方法来分类。对于排序,我使用: NSArray *unSortedNames = [NSArray arrayWithContentsOfURL: plistURL]; NSSortDescriptor *descriptor = [[[NSSortDescriptor alloc] initWithKey:@"rating" asc

我想排序的plist有问题。这是一个高分,我想排序的球员排名。问题是排名是一个字符串,这会破坏排序(我得到1,10,2,3,4,5,6,7,8,9)

我需要用正确的方法来分类。对于排序,我使用:

NSArray *unSortedNames = [NSArray arrayWithContentsOfURL: plistURL];
NSSortDescriptor *descriptor = [[[NSSortDescriptor alloc] initWithKey:@"rating" ascending:YES] autorelease];
names = [[unSortedNames sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]] retain];
前三名玩家的日志如下所示:

有没有办法解决这个问题

谢谢Mikael有几个选择

  • 向类中添加一个只读属性,该属性返回评分iVar的整数版本。然后根据此属性进行排序

  • 使用
    sortedarrayingfunction:
    编写一个函数,根据两个排名的整数值比较它们,并返回排序顺序


  • 1看起来应该简单得多。

    谢谢您的快速回答!但现在我觉得自己很愚蠢,不知道如何从未分类的名字中进行iVar评分…嗯,我明白了,每个分数都是一本字典,而不是你的一个班级。。。我注意到你在玩家3的名字周围加了引号,但在另外两个名字周围没有引号。。。你的分数周围有引号吗?哦,那只是一个名字,上面有一个空格,比如:“First Last”。我只是把名字改成了“playerXXX”,因为我没有透露与我一起工作的人的真实姓名。否则,没有其他引号。嗯,我很惊讶没有引号,排名被当作字符串而不是整数。尝试第二种选择,然后。。。您编写了一个简单的c函数,该函数接受2个参数并返回一个int,如果第一个参数小于第二个参数,则返回-1;如果第一个参数大于第二个参数,则返回0;如果第一个参数大于第二个参数,则返回1。是的,我尝试使用此函数:但我不是c-person:),但无法使其工作。我不知道我将发送什么作为“上下文”。如果我尝试“评级”,我会得到一个错误。。。真的不知道怎么解决这个问题。
      {
        isUser = NO;
        nick = Player;
        rating = 1;
        score = 57314;
    },
        {
        isUser = NO;
        nick = Player321;
        rating = 10;
        score = 212;
    },
        {
        isUser = NO;
        nick = "Player123";
        rating = 2;
        score = 24540;
    },