我有一个问题,困扰我几天了。
我有一个名为countries的数组。此数组包含一个自定义对象,用于保存国家,城市,IP,状态等数据。
我需要在属性" country"中划分的tableview中显示这些对象。
这意味着,如果我有两个自定义对象,包括国家"澳大利亚"我需要将它添加到名为" Australia"如果我有5个对象与国家"西班牙"我需要这5个对象在西班牙部分。
我需要找到一种方法来确保即使某个对象添加了不同的国家/地区,也会将其放在带有国家/地区名称国家/地区名称的部分下。
我尝试过各种各样的事情但是没有任何事情能够解决这个问题。 这是动态的原因是因为我不知道每个部分中将有多少个对象。这意味着每个部分中的对象数量可以更改。
我使用此代码按字母顺序对数组进行排序我只需要根据属性" Country"将每个对象放入一个部分。我不知道将会有多少部分或每个部分中有多少个对象。
self.countries = self.countries.sorted { $0.country < $1.country }
有人能帮我一把吗?
编辑:添加了我的cellForRowAtIndexPath。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if recievedData == true {
var cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CountryListCell
var serverInfo = countries[indexPath.row] as ServerInfoObject
cell.countryTitle.text = serverInfo.country
cell.flagImage.image = UIImage(named: serverInfo.flag)
cell.serverInfo = serverInfo
return cell
}
return CountryListCell()
}
答案 0 :(得分:2)
因此您需要将服务器排序为字典。 E.G [String:[Server]]
字符串是部分名称(国家/地区)。这是一个例子dict ["Albania":[serv1,server2,...]]
您可以通过对服务器阵列进行排序来完成此操作(我假设您可以解决这个问题)。
您还需要保存部分标题的数组,以便在cellForRowAtIndexPath
中访问它。例如["Albania","Brazil","Cuba","Germany","Russia"]
所以基本上在cellForRowAtIndexPath
中使用
var country = yourSectionArray[indexPath.section]
然后通过字典访问对该国家有效的服务器数组,如下所示:
var serversOfCurrentSection = yourDictionary[country] as [Server]
然后获取索引的当前服务器
var server = serversOfCurrentSection[indexPath.row]
获取每个部分中的对象数量:
var country = yourSectionArray[indexPath.section]
yourDictionary[country].count
答案 1 :(得分:0)
您是否尝试使用NSPredicate来帮助您按国家/地区名称过滤数组?我认为您可以在运行时或加载开始时将服务器拆分为数组,具体取决于列表是否更新。
在numberOfRowsInSection:
中,只需计算索引部分的子数组的行数。
同样,在cellForRowAtIndexPath:
中,使用已排序的数组从自定义类中获取信息。
我不得不处理与排序联系人类似的事情。希望这有帮助!
答案 2 :(得分:0)
有很多方法可以做到这一点。
表视图需要稳定的数据才能工作。如果更改数据模型,则需要告知表视图重新加载。
我可能会以两种方式存储记录:在一个平面数组中,然后在一个数组中按国家/地区排列,其中该数组中的每个条目都是该国家/地区的记录数组。像数组这样的集合对象通过引用将对象保存在其中,因此在多个数组中存储相同的记录时没有太多开销。
这使得创建分段表视图非常干净。
您可以按国家/地区对您的平面记录数组进行排序,然后对已排序的数组进行传递,按国家/地区构建记录数组。如果您需要按国家/地区内的某些其他条件排序记录,则可能需要使用NSPredicate进行排序而不是排序,因为它可以使用排序键数组。
如果用户可以在任何地点输入新记录,您可以收集该新记录的数据,然后在排序的数组中找到它所在的位置,将其插入该位置,然后重建您的二维数组排序的平面数组中的数组。这样可以避免对整个数组进行重新排序,这对于大型数据阵列来说可能很慢。)