0

在我的应用程序中,我有一个由 NSMutableArray 中的值填充的表格视图。这个可变数组被添加到一个单独的视图控制器中,所以我必须重新加载数据。

这可能是一个非常简单的问题,但我已经阅读了 15 篇以上的帖子,但似乎没有一篇涉及 xcode 4.2,以及 [self.tableView reloadData] 的确切位置。这种方法究竟应该放在哪里?当我尝试将它放在 tableviews 源代码中的各个位置时,tableview 第一次初始化,其中没有任何值。

还是应该将它放在其他视图控制器代码中,在这种情况下,我如何引用正在使用的 UItableview 子类的特定实例?

首先十分感谢。

4

5 回答 5

2

Xcode 4.2 没有什么特别之处,在这里应该有所不同,所以你应该注意你找到的其他来源,即使它们引用了其他版本的 Xcode。

它不一定是[self.tableView reloadData]准确的。您向表格​​视图对象reloadData发送消息。您如何访问该表视图对象 - 通过 self 上的属性、通过实例变量、通过另一个类中的属性等 - 取决于您。

如果您已经tableView设置了属性,那么从另一个视图控制器重新加载数据的最简单方法是直接向表视图对象reloadData发送消息。因此,例如,如果一个方法 inViewControllerFoo有一个指向ViewControllerBar被调用的指针bar并且知道它应该重新加载它的表视图,它可以调用[bar.tableView reloadData].

如果您没有设置属性,您可以自己创建它,或者您可以在视图控制器上创建一个reloadData方法,该方法保存代表其他视图控制器执行此操作的表视图。

然而,这些方法混淆了逻辑和表示,这通常是一个非常糟糕的架构。如果一个视图控制器知道另一个视图控制器应该更新它的视图,那么很有可能,您应该将一些逻辑分解到独立于任何特定视图控制器的第三类。第三类可以传输通知,或者您的视图控制器可以通过 KVO 监听其状态的变化。

于 2011-12-21T19:33:38.410 回答
0

在你做 [tableView reloadData] 之后;

tableView 将重新加载并委托函数以获取表格内容

如果你 [tableView reloadData] 清除你的表

然后检查

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

你必须在那里读取错误的值

于 2011-12-21T18:57:15.137 回答
0

你在使用导航控制器吗?填充数组数据的视图控制器是否被推送到表视图之上?如果是这样,请将 reloadData 调用放在 viewwillappear 中,因为当导航控制器的子视图弹出并且表格视图现在再次可见时,它确实会被调用。

于 2011-12-21T19:52:00.383 回答
0

您应该检查您的阵列是否正确实施。当您进入视图时尝试记录它,例如在方法 -viewWillAppear 中。

通常你把它[self.tableView reloadData]放在-viewWillAppear方法中。

于 2011-12-21T20:30:42.237 回答
0

您通常在 viewController 的“viewDidLoad”方法中调用 reloadData,该方法设置为 tableView 的 dataSource 和委托。但这并不重要,只需确保在每次更改数据模型(您的 NSMutableArray)后调用 reloadData 即可。

从您的描述来看, reloadData 不是您的问题的可能原因。检查您是否已将 viewController 设置为 tableView 的 dataSource 属性。

此外,您通常使用数据源,就像我在这里假设的那样,而不是像您似乎正在做的那样子类化 TableView。

于 2011-12-21T21:10:01.857 回答