所有
我有大约3000个单词,其中包含我正在加载到TableView中的定义。现在,它只是一个排序的单词列表,没有这些部分,因为我还没有添加它们。
我需要在我的TableView数据(A,B,C ......)中添加部分,并且似乎有几种方法可以做到这一点所以在我跳到这之前我正在寻找一些确认或纠正如果我要去错误的兔子洞。
目前,TableView读取的数据按照以下代码存储为NSMutableArray中的对象:
//AppDelegate.m
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
//...
NSMutableArray *wordArray = [[NSMutableArray alloc] init];
//Loop through result set from DB and populate objects
while([rs next]){
[wordArray addObject:[Word wordWith:[rs stringForColumn:@"word"]
Definition:[rs stringForColumn:@"definition"]
SectionIndex:[rs stringForColumn:@"sectionIndex"]]];
}
MainViewController *mainViewController =
[[MainViewController alloc] initWithNibName:@"MainView" bundle:nil];
mainViewController.listContent = wordArray;
//...
}
每个对象都有一个段索引值([A-Z0-9]),所以我已经知道每个单词进入哪个部分,我知道这些部分需要是什么,我可以很容易地得出每个部分的对象计数。在填充NSMutableArray之前,所有单词都已通过SQL排序,以便已经处理完毕。
我可以使用一个NSMutableArray创建多个部分,还是需要做一些不同的事情?
谢谢
答案 0 :(得分:1)
您可以将单词存储到NSDictionary中的数组中,并保存每个字母的键。
将返回的部分数量
[[dictionary allKeys] count];
部分标题
NSArray * keys = [dictionary allKeys];
[keys objectAtIndex:sectionIdx]
部分中的行数将返回
NSArray * keys = [dictionary allKeys];
[(NSArray *)[dictionary objectForKey:[keys objectAtIndex:sectionIdx]] count];
每个单词都是
NSArray * keys = [dictionary allKeys];
[(NSArray *)[dictionary objectForKey:[keys objectAtIndex:sectionIdx]] objectAtIndex:indexPath.row];
答案 1 :(得分:0)
我发现您有时希望在列表中添加排序,然后另一种方法可能会很有趣。将所有模型(在您的示例中为Word)放入字典中,并将模型的某些唯一值作为键。
实现一个排序方法,每次基础字典更改时运行该方法。分类方法将使用例如keysSortedByValueUsingComparator在字典上,为不同的排序顺序提供不同的块。让排序方法创建节数组,并在与字典中的键对应的数组中添加键。
您不会存储任何两次,只需提供不同的排序块(可以查看模型类的任何属性),您就会获得不同的排序顺序。