2

我目前正在使用 sqlite 创建一个 TableView 应用程序,到目前为止,它按预期工作。第一个视图是美国所有州的列表,并在一个名为“州”的部分中按字母顺序返回它们。我的问题是...如何为这些数据创建一个按字母顺序排列的列表?换句话说,创建一个名为“A”的部分,其中包含州阿拉巴马州、阿拉斯加州、亚利桑那州、阿肯色州。一个名为“C”的部分将包含加利福尼亚、科罗拉多、康涅狄格。它基本上会梳理结果,寻找每个州的第一个字母,如果有匹配,则将该州放在适当的部分。

我遇到了一些描述如何做到这一点但与 sqlite 无关的文章。任何帮助将不胜感激!!

先感谢您!

4

2 回答 2

1

首先,所有这些非 sqlite 示例可能都已经足够了。从 NSArray 或 sqlite 数据库获取数据并没有什么特别之处。反正,

几个选项。首先,这个例子太简单了,我可能只是阅读州名(当然是有序的),并在我经历的时候构建我的模型(例如,看看第一个字母,如果不同的第一个字母开始一个新的部分, ETC。)。

第二个选项是在 viewDidLoad 期间读入支持在我的 tableview 后面构建模型所需的最少数据。我个人使用的模型是 Section 对象的 NSMutableArray,每个 section 对象都由 section header 和 Row 对象数组组成,其中这些 Row 对象只是数据库中相关行的唯一标识符。然后,要填充该模型,我只需执行如下 sql 语句:

select substr(last_name,1,1), employee_id from employee order by last_name, first_name;

从那开始,我将遍历并构建一组部分的模型,并为每个部分创建一个用于该部分中各个项目的唯一标识符数组。

还有很多其他方法。希望这会让你继续前进。如果没有,请使用 tableview 背后的模型更新您的问题,也许还有一些您尝试过的代码,我们很乐意为您提供更多帮助。

于 2012-07-21T14:07:28.773 回答
0

一种方法可能是提供一个数组数组的结构。数组的每个部分都将包含一个状态数组,这些状态与相同的状态首字母匹配。然后在这个结构上工作以实现数据源和委托方法。

因为我碰巧做了一些非常相似的事情,这里有一个代码片段来提供结构(self.browserContents)。我希望它会有所帮助:

BrowserContents *bc = [[BrowserContents alloc] init];

// Create an array to hold the sub arrays
NSInteger sectionCount = [bc getNumberOfCategories]; 
NSMutableArray *sectionsArray = [NSMutableArray arrayWithCapacity:sectionCount];

// Iterate over each section, creating each sub array 
for (int i = 0; i < sectionCount; i++) {
    NSMutableArray *singleSectionArray = [NSMutableArray arrayWithCapacity:1];
    [sectionsArray addObject:singleSectionArray]; 
}

// Fill up each section
 NSMutableArray *contentsTemp = bc.contents;
 for (BrowserStateItem *item in contentsTemp) {
        [(NSMutableArray *)[sectionsArray objectAtIndex:[item categoryId]] addObject:item];
 }

// Iterate over each section array to sort the items in the section 
UILocalizedIndexedCollation *indexedCollation = [UILocalizedIndexedCollation currentCollation];
for (NSMutableArray *singleSectionArray in sectionsArray) 
{
        NSArray *sortedSection = [indexedCollation sortedArrayFromArray:singleSectionArray collationStringSelector:@selector(name)];
        [self.browserContents addObject:sortedSection];
}

注意: BrowserContents 是一个类,它应该包含所有状态的列表、类别的数量和它应该属于的类别的 ID(例如:A->1、B->2 等......假设你有开始的状态与 A 和 B)。最后查看Professional iPhone and iPad Database Application Programming一书。这是了解 iOS 中数据库编程的绝佳资源。

于 2012-07-21T16:01:31.690 回答