gpt4 book ai didi

iphone - NSMutableArray 中的 UITableView 分组部分

转载 作者:技术小花猫 更新时间:2023-10-29 10:44:17 26 4
gpt4 key购买 nike

我有一个基本上读取 xml 文件并在 UITableView 中显示结果的应用程序。我正在尝试按“国家/地区”(xml 文件元素的一个属性)对列表项进行分组,并将它们显示在 UITableView 部分中。

目前我读取 xml 文件并将每个元素作为自定义对象存储在 NSMutableArray 中。该数组具有以下结构:

数组: 0 => (标题、描述、日期、国家) 1 =>(标题、描述、日期、国家) 2 =>(标题、描述、日期、国家) 3 => (标题、描述、日期、国家)

我曾尝试创建另一组独特的国家/地区,这使我能够正确创建部分标题,但我正在努力寻找一种方法来在每个部分标题下方显示正确的项目。

if(![countryArray containsObject:itemCountry]) //if country not already in array
{
[countryArray addObject:itemCountry]; //Add NSString of country name to array
}

当我循环遍历 xml 文件时,itemCountry 是每个元素的国家/地区属性。

[countryArray count]; //gives me the amount of sections needed

所以我想我的问题是如何算出每个部分需要多少行?如何为每个部分显示正确的数组项?

任何帮助或指点都会很棒

最佳答案

与其创建包含数据的自定义对象数组,不如创建字典。

NSMutableDictionary * theDictionary = [NSMutableDictionary dictionary];

// Here `customObjects` is an `NSArray` of your custom objects from the XML
for ( CustomObject * object in customObjects ) {
NSMutableArray * theMutableArray = [theDictionary objectForKey:object.country];
if ( theMutableArray == nil ) {
theMutableArray = [NSMutableArray array];
[theDictionary setObject:theMutableArray forKey:object.country];
}

[theMutableArray addObject:object];
}

/* `sortedCountries` is an instance variable */
self.sortedCountries = [[theDictionary allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

/* Save `theDictionary` in an instance variable */
self.theSource = theDictionary;

稍后在 numberOfSectionsInTableView 中:

- (NSInteger)numberOfSectionsInTableView {
return [self.sortedCountries count];
}

tableView:numberOfRowsInSection: 中:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [[self.theSource objectForKey:[self.sortedCountries objectAtIndex:section]] count];
}

tableView:cellForRowAtIndexPath: 中:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
[..]

/* Get the CustomObject for the row */
NSString * countryName = [self.sortedCountries objectAtIndex:indexPath.section];
NSArray * objectsForCountry = [self.theSource objectForKey:countryName];
CustomObject * object = [objectsForCountry objectAtIndex:indexPath.row];

/* Make use of the `object` */

[..]
}

这应该带你走完整个路。

旁注
如果不是为了显示数据而只是获取国家/地区的计数,那么 PengOne 方法的更好替代方法是使用 NSCountedSet

NSCountedSet * countedSet = [NSCounted set];
for ( NSString * countryName in countryNames ) {
[countedSet addObject:countryName];
}

现在所有唯一的国家都在 [countedSet allObjects] 中可用,每个国家的计数将是 [countedSet countForObject:countryName]

关于iphone - NSMutableArray 中的 UITableView 分组部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6397370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com