【问题标题】:Why do strings from plist not display in correct order in a UITableView?为什么 plist 中的字符串不能在 UITableView 中以正确的顺序显示?
【发布时间】:2012-10-21 19:30:14
【问题描述】:

当我通过以下代码在NSMutableArray 中添加这些行时,我的应用中有一个 plist,其中包含根字典中的行:

NSString * item = [badgeDict objectForKey:[NSString stringWithFormat:@"item%i",indexPath.row+1]];
[badgeArray addObject:item];

它给了我加扰的排序数组... 我希望它以相同的顺序...记住这些行的键称为 (item1,item2,item3...,etc)...

应该如何解决?

【问题讨论】:

  • 你也说数组有问题,你打印出数组的实际内容来验证吗?

标签: objective-c ios uitableview


【解决方案1】:

在tableView: cellForRowAtIndexPath: 中可以这样访问对象

NSArray *keys = [[badgeDict allKeys] sortedArrayUsingSelector:@selector(compare:)];
id value = [badgeDict objectForKey:[keys objectAtIndex:indexPath.row]];

如果您的 plist 很小,这很好,否则将键顺序保存在您的成员变量中。

【讨论】:

    【解决方案2】:

    是的,因为您的代码在 cellForRowAtIndexPath 中,所以它会被打乱。

    UITableViewCells 被缓存。由于您没有显示相关的周围代码,因此很可能您正在重新显示缓存的单元格。

    【讨论】:

      【解决方案3】:

      考虑到tableView:cellForRowAtIndexPath: 会在需要新单元格时被调用:第一次填充UITableView 时以及滚动时出现单元格时。因此,用这种方法填充数据源并不是一个好习惯。

      我建议您在viewDidLoad 中填充您的数据。如果UITableView 需要以某种方式刷新包含的信息,则创建一个方法来执行此操作并从viewDidLoad 调用它并从刷新发生的位置(例如按下按钮、拉动刷新时...)。

      【讨论】:

        【解决方案4】:

        我建议您将此代码移动到 viewDidLoad 方法而不是 cellForRowAtIndexPath,这可能是您调用了 reloadRowsAtIndexPaths 之类的方法,如果您的 badgeArray 是实例变量,这将破坏顺序,而且您可能无法完全填充整个数组,因为没有所有行都会同时显示在屏幕上。

        您的方法似乎效率不高。如果您的 badgeDict 可能会更改,您可以尝试实施通知。只需将您的 UIViewController 作为观察者添加到 badgeDict 更改并在发生此类事件时重新加载 badgeArray。

        这样做:

        • 在你的 viewController 的 viewDidLoad 中添加:

          [[NSNotificationCenter defaultCenter] addObserver:self 选择器:@selector(refreshBadgeArray:) name:@"BadgeChanged" object:nil];

        • 在你的 viewController 的 dealloc 中添加:

          [[NSNotificationCenter defaultCenter] removeObserver:self];

        • 在更改 badgeDict 的地方:

          [[NSNotificationCenter defaultCenter] postNotificationName:@"BadgeChanged" object:self];

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-06-15
          • 2015-06-27
          • 1970-01-01
          • 1970-01-01
          • 2012-10-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多