【问题标题】:Tableview - Creating numberOfSectionsInTableView based on data in sqliteTableview - 根据 sqlite 中的数据创建 numberOfSectionsInTableView
【发布时间】:2012-07-21 13:19:46
【问题描述】:

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

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

提前谢谢你!

【问题讨论】:

    标签: ios sqlite xcode4.2 tableview


    【解决方案1】:

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

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

    第二个选项是在 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 背后的模型更新您的问题,也许还有一些您尝试过的代码,我们很乐意为您提供更多帮助。

    【讨论】:

    • 罗伯特,谢谢您的回复。我很欣赏你的建议。我将尝试您建议的第二个选项。再次感谢您!
    【解决方案2】:

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

    因为我碰巧做了一些非常相似的事情,这里有一个代码 sn-p 来提供结构(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 中的数据库编程的绝佳资源。

    【讨论】:

    • Tiguero - 非常感谢您的回复和我的示例代码以供参考。非常感激!感谢您的宝贵时间!
    猜你喜欢
    • 2018-07-19
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多