使用现有的NSArray对象属性为分段tableView创建新的NSArray

时间:2012-03-07 17:53:53

标签: iphone nsmutablearray nsarray nsmutabledictionary nssortdescriptor

所以我有一种经典的情况,我希望按月/年分组tableView。我有一个名为conference的{​​{1}}对象的成员,我将其用于将不同的beginDateSearchString放入存储桶中;我的问题出现在下一部分,我尝试并且未能使用conferenceNSSortDescriptor(即日期)对每个存储桶进行排序。

我收到与beginDate无法接收排序描述符类型选择器相关的错误。

这是令人厌恶的代码:

unsorted

1 个答案:

答案 0 :(得分:-1)

除了排序之外,您可能希望过滤数组。请参阅NSPredicate和NSArray方法-filteredArrayUsingPredicate:然后创建由过滤器创建的eventArrays的eventsByDateArray。然后在表视图委托中创建单元格,如果一切都正确排序,第一部分将表示eventArray中事件的日期,它是eventsByDateArray的第一个对象,表格行将由eventArray中的事件组成。等等每个日期。

<强>加 您的快速枚举不正确。您可以通过字典的键来枚举。所以在你的代码中,unsorted等于枚举的每个键。这对每个人都是一个很好的教训。你输入一个变量并不重要。当Objective-C编译时,它会将它们全部转换为id。所以NSMutableArray *unsorted不是NSMutableArray,除非它被分配给NSMutableArray。如果将未分类分配给NSString,它将是NSString。字典的快速枚举器使用密钥工作。因此,在这种情况下,unsorted将成为NSString。

而不是:

for (NSMutableArray *unsorted in dictionary) {
        [unsorted sortUsingDescriptors:sortDescriptors];
    }

你应该有这个:

for (id key in dictionary) {
    NSMutableArray *unsorted = [dictionary objectForKey:key];
    [unsorted sortUsingDescriptors:sortDescriptors];
}