Xcode重新加载表格视图

发布于 2024-12-22 06:22:34 字数 315 浏览 3 评论 0原文

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

这可能是一个非常简单的问题,但我已经阅读了超过 15 篇文章,但它们似乎都没有解决 xcode 4.2 以及 [self.tableView reloadData] 的确切位置。这个方法具体应该放在哪里呢?当我尝试将它放在表视图源代码中的各个位置时,表视图第一次初始化,其中没有任何值。

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

预先非常感谢。

In my app I have a tableview being filled by values from an NSMutableArray. This mutable array is being added to in a separate viewcontroller, and so I have to reload the data.

This is probably a very simple question, but I have reading 15+ posts and none of them seem to address xcode 4.2, and where exactly to put the [self.tableView reloadData]. Where exactly should this method be put? When I have tried putting it in various places in the tableviews source code, the tableview initialized for the first time with no values in it.

Or should it be put in the other viewcontrollers code, in which case how can I reference the particular instance of my UItableview subclass that is being used?

Thanks very much in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

独自唱情﹋歌 2024-12-29 06:22:34

Xcode 4.2 没有什么特别之处,应该会在这里产生任何差异,因此您应该注意您找到的其他来源,即使它们引用了其他版本的 Xcode。

它不必完全是 [self.tableView reloadData]。您向表视图对象发送 reloadData 消息。如何访问该表视图对象(通过自身的属性、通过实例变量、通过另一个类的属性等)取决于您。

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

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

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

There is nothing special about Xcode 4.2 that should make any difference here, so you should pay attention to other sources you have found, even if they refer to other versions of Xcode.

It doesn't have to be [self.tableView reloadData] exactly. You send the table view object the reloadData message. How you access that table view object - through a property on self, through an instance variable, through a property in another class, etc. - is up to you.

If you already have the tableView property set up, then the simplest way of reloading the data from another view controller is to simply send the table view object the reloadData message directly. So, for example, if a method in ViewControllerFoo has a pointer to ViewControllerBar called bar and knows it should reload its table view, it could call [bar.tableView reloadData].

If you don't have the property set up, you can create it yourself, or you could create a reloadData method on the view controller holding the table view that does it on behalf of other view controllers.

However these approaches mix up logic and presentation, which is usually a pretty poor architecture. If one view controller knows that another view controller should be updating its view, then chances are, you should be factoring out some of that logic to a third class that is independent of any particular view controller. That third class can transmit notifications, or your view controllers can listen for changes to its state via KVO.

老街孤人 2024-12-29 06:22:34

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

Are you using a navigation controller? Is the view controller that populates the array data pushed ontop of the table view? If so put the reloadData call in viewwillappear because this does get called when a subview of the navigation controller is popped off and the table view is now visible again.

[旋木] 2024-12-29 06:22:34

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

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

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

You typically call reloadData in the "viewDidLoad" method of the viewController that is set as the dataSource and delegate of the tableView. But it does not really matter much, just make sure you call reloadData every time after changes to the datamodel (your NSMutableArray).

Judging from your description, the reloadData is not the likely cause of your problem. Check that you have set your viewController as the dataSource property of the tableView.

Also, you typically use a data source, as I have assumed here, rather than subclassing the TableView, as you seem to be doing.

著墨染雨君画夕 2024-12-29 06:22:34

在你执行[tableView reloadData]之后;

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

如果您 [tableView reloadData] 清除表格

然后检查

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

您必须在那里读取错误的值,

after you do [tableView reloadData];

tableView will reload and delegate function to get the table content

if you [tableView reloadData] clear your table

then check the

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

you must read the wrong value there

扛刀软妹 2024-12-29 06:22:34

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

通常您将[self.tableView reloadData]放在-viewWillAppear方法中。

You should check if your array is correctly implemented. Try to log it when you enter in the view, for example in the method -viewWillAppear.

Usually you put the [self.tableView reloadData] in the -viewWillAppear method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文