未在 TableView 中重新加载正确的数据

Posted

技术标签:

【中文标题】未在 TableView 中重新加载正确的数据【英文标题】:Not reloading the right data in UITabeView 【发布时间】:2013-12-29 21:50:16 【问题描述】:

我编写了这段代码来重新加载 UItableView,其日期与用户单击主视图控制器中今天的事件 UIButton 时的当前日期相同,但问题是下面的代码没有重新加载正确的数据(它只是给出了初始数据,没有将事件的日期与 iPhone 中的日历日期进行比较),我的数据来自项目中的一个 json 文件,由事件的 NSArray 组成,每个键都有不同的值和其中一个键是该事件的数据(“日期”),谁能帮我澄清一下为什么下面的代码没有返回正确的数据??

  @implementation MainViewController 
 NSArray *_events;
 



.... 

- (IBAction)upcomingEvents:(id)sender 

NSDate *currDate = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"dd-MM-YYYY"];
NSString *dateString = [dateFormatter stringFromDate:currDate];


for (Events *event in _events)

    if([event.date isEqualToString:dateString])

       [self.myTableView reloadData];

    





【问题讨论】:

如果_events 是您的数据源,那么您只需过滤数组,然后将reloadData 消息发送到您的tableview 以进行刷新。现在你只是在刷新你的 tableview 而不对你的数据源数组做任何改变。 @Alladinian 以及如何过滤数组?? (我对 Xcode 和 Objective-C 很陌生) 【参考方案1】:

如果您使用的是 UITableViewDataSource,则应确保它仅返回符合您的条件[event.date isEqualToString:dateString]的事件@

你可以的

NSArray * dateEvents = [_events filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(Events * event, NSDictionary *bindings)

    return [event.date isEqualToString:dateString];
];

然后您可以将dateEvents 用于您的 UITableViewDataSource。

【讨论】:

是的,我正在使用 UITableViewDataSource,这是否意味着我不必再次使用 for 条件?我应该在哪里包含上述声明?在 IBAction 内? 您可能希望在 'upcomingEvents' 方法中更新 dateEvents。并确保 UITableViewDataSource 使用 dateEvents 而不是事件。您可能希望将 dateEvents 设置为您班级的属性。 当我在我的代码中包含上面的代码时,我在 [_events] 中出现错误,说 (UNKNOWN RECEIVER) 即使我在我的实现部分中声明了该数组 (NSArray *_events) .. 我不不懂!!!以及如何在我的 UITableViewDataSource 中包含 dateEvents ? (我对这一切都很陌生,我将不胜感激任何进一步的澄清) @user3066516,不清楚为什么 _events 会给你这个错误,因为你在上一个问题中使用了它,并且它在那里工作。要使用 dateEvents 而不是 _events 作为数据源,您只需在数据源方法(numberOfRowsInSection、cellForRowAtIndexPath 等)中使用它,而不是使用 _events。您可能希望有一个 if-else 子句来选择您使用的数组,具体取决于您在即将到来的事件方法中设置的标志。 查看更多代码可能有助于了解您需要更改的内容。另外,你得到的错误到底是什么?未知的接收者意味着未知的标识符。您确定 _events 在您使用它的范围内吗?是编译时错误还是运行时错误?

以上是关于未在 TableView 中重新加载正确的数据的主要内容,如果未能解决你的问题,请参考以下文章

tableview 不会从第二类正确重新加载

Tableview没有重新加载数据

重新加载数据时 Tableview 崩溃

Swift - 第二次加载后 Tableview 无法正确重新加载

解析查询后在哪里重新加载 UITableView 数据

iOS 为啥我的应用程序在重新启动之前不会将数据加载到 tableview 中?