为什么UITableView中的部分在不同设备上的顺序不同?

时间:2014-11-12 10:36:22

标签: ios iphone uitableview swift

我在我的应用程序中实现了一个UITableViewController。除了TableView中各部分的顺序外,一切正常。

每个部分中的部分数和行数都可以。我从服务器获取一些值并在TableView中显示它们。它们按日期排序,每个部分包含与该日期相关的值。

现在,如果我有昨天(2014年11月11日)和今天(2014年11月12日)的价值,我的iPhone 6将首先显示12.11.2014部分。在iPhone 5上,首先显示11.11.2014部分 - 但它是相同的代码!我不知道如何解决这个问题。

这是2个截图,所以你知道我的意思:

iPhone 5截图 iPhone 5 screenshot

iPhone 6屏幕截图 iPhone 6 screenshot

在第二张屏幕截图中,首先显示12.11.2014。

编辑:
我的TableView显示最新的比特币交易。我有一个NSMutableDictionary,它有两个条目(在我的例子中),一个条目为“12.11.2014”,一个条目为“11.11.2014”,所以我的 numberOfSections -method返回2.

var trades : NSMutableDictionary!

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return trades.count
}

现在,该字典中的每个条目都包含一个交易列表,因此我的字典类型只是:

String : [Trade]

所以我的 numberOfRowsInSection 看起来像这样(我知道这有点棘手):

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return (self.trades.objectForKey((self.trades.allKeys as NSArray).objectAtIndex(section) as String)! as [Trade]).count
}

就像我说的,在iPhone 6上它运行良好,在iPhone 5上没有。

2 个答案:

答案 0 :(得分:5)

您正在存储"部分" NSDictionary中的数据。

NSDictionary是一个无序集合。没有" order"在NSDictionary中。说订单改变没有意义。

如果您想将内容存储在字典中并以相同的顺序将它们输出,那么您需要先对键数组self.trade.allKeys进行排序,然后才能解决问题。

这样做并不是不同的设备。您可能会发现它也会在单个设备上发生变化。

更好(不同)的方法是使用NSArray来存储数据。

喜欢这个......

//self.allTrades array...
[
    {
        title  : 11.11.2014,
        trades : //array of trades for 11.11.2014
    },
    {
        title  : 12.11.2014,
        trades : //array of trades for 12.11.2014
    }
]

现在您可以通过...来访问某个部分的交易信息。

self.allTrades[indexPath.section]

并访问一个项目......

//            1.                 2.        3.
self.allTrades[indexPath.section]["trades"][indexPath.row]
// 1. get the dictionary from the array for the section
// 2. then get the trades array from that dictionary
// 3. then get the item from that array.

答案 1 :(得分:0)

好了,现在我添加了一些代码行,现在效果很好。我正在排序我的字典的键(字符串)。

func sortDictionaryKeys(dict : NSDictionary) -> NSMutableArray {
    var sortedKeys = (dict.allKeys as NSArray).sortedArrayUsingSelector("compare:")
    var retArray = NSMutableArray()

    for var i = sortedKeys.count-1; i > 0; i-- {
        retArray.addObject(sortedKeys[i])
    }
    return retArray
}

我必须“反转”for-Loop,以便日期按降序排序,以便最新的交易位于TableView之上。

在对键进行排序后,我通过存储在 sortedKeys 数组中的键访问我的[Trade]列表。这不是@Fogmeister发布的解决方案,但他给了我一个NSDictionary根本没有排序的提示 - NSArray 排序。

感谢您的帮助!