Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone Objective-C中的排序数组_Iphone_Objective C_Ios - Fatal编程技术网

Iphone Objective-C中的排序数组

Iphone Objective-C中的排序数组,iphone,objective-c,ios,Iphone,Objective C,Ios,我目前正在尝试自学Objective-C,并且正在做一个需要排序数组的练习 我使用以下代码完成了它: NSSortDescriptor * newSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:TRUE]; NSArray *sortDescriptors = [NSArray arrayWithObject:newSortDescriptor]; [self.theBookStore sortU

我目前正在尝试自学Objective-C,并且正在做一个需要排序数组的练习

我使用以下代码完成了它:

NSSortDescriptor * newSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:TRUE];
NSArray *sortDescriptors = [NSArray arrayWithObject:newSortDescriptor];
[self.theBookStore sortUsingDescriptors:sortDescriptors];
我的问题是这里到底发生了什么。我真的不太明白我到底做了什么

第1行:我知道我在这里创建了一个具有描述符的新对象。这有两个参数,一个是我要排序的列,另一个是升序

第二行:这是我感到困惑的一行。为什么我需要排序描述符数组?当我读到这段代码时,我怀疑它创建了一个只有一行的数组,对吗

第3行:我知道这是在调用sortUsingDescriptors方法,但我的困惑是,为什么这个函数需要一个数组

我已经阅读了文档,但我真的在寻找一个简单的解释

非常感谢您的帮助

  • 第1行:。。是的,你的权利。您正在创建一个名为
    NSSortDescriptor
    的自定义对象。该对象定义了要排序的属性。您确实输入了“标题”。因此,数组中要排序的对象将在该属性(yourObject.title“kind of”)之后排序

  • 第2行:因为排序方法(
    sortusingsdescriptor
    )总是需要一个数组,所以您需要创建一个只有一个对象的NSArray。可以看起来有点傻。但这绝对有道理。假设您想按照两个标准进行排序(先说“标题”,然后说“城市”)

  • 第3行:是,这里必须是一个数组,因为在多个条件之后进行排序

并始终保持内存清洁: 在第1行,您分配/初始化了一个NSSortDescriptor。 因此,使用后请清理(如果您不使用)。 因此,添加一行:

[newSortDescriptor release];

如果存在多个匹配项,将使用多个排序描述符来解决所发生的问题。我是优先顺序。第二个描述符将告诉它如果发现两个标题相同该怎么办

第1行:我知道这里我创建了一个具有 描述符。这有两个参数,我要排序的列和 它正在上升

实际上,您已经创建了一个作为描述符的对象。它描述了如何对数组进行排序

第二行:这是我感到困惑的一行。为什么我需要一个数组 排序描述符?当我读到这段代码时,我怀疑它创建了一个数组 只有一行,对吗

对--您已经创建了一个包含单个对象的数组。如果您真的想对那么多字段进行排序,可以创建一个包含10个、15个或87个排序描述符的数组。更多的时候,你用一个,两个,也许三个。因此,如果要对人员列表进行排序,可以添加指定姓和名的排序描述符。这样,姓氏相同的人将根据他们的名字排列在该组中

第3行:我知道这是调用SortusingDescriptor 方法,但我的困惑是,为什么这个函数需要一个数组

同样,您可以使用主、次、三级(等等)排序键。您可以有一个单独的方法,当您只想对一个键进行排序时,它采用单个排序描述符而不是数组。NSArray不提供此功能,但如果需要,您可以随时将其添加到类别中:

@category NSArray (SingleSortDescriptor)

- (NSArray*)sortUsingDescriptor:(NSSortDescriptor*)descriptor;

@end

@implementation NSArray (SingleSortDescriptor)

- (NSArray*)sortUsingDescriptor:(NSSortDescriptor*)descriptor
{
    return [self sortUsingDescriptors:[NSArray arrayWithObject:descriptor]];
}

@end

我们已经有了ARC大约一年了——也许是时候开始假设人们正在使用它,而不是假设他们没有使用它了。@JonasSchnelli和我的iPhone 3G……:-(@Caleb:Welcome.。我访问了你的个人资料。如何让它看起来像那样?看起来很好。@anonymous我不确定你指的是什么,除非它可能是关于我部分中的“天赋”?转到你的个人资料,点击顶部附近的“天赋”链接(“编辑prefs flair应用程序…”),然后复制HTML以供参考“组合堆栈交换天赋”。将其粘贴到个人资料的“关于我”部分。