【发布时间】:2018-08-20 00:15:41
【问题描述】:
我的 UITableView 有一个非常奇怪的行为。当我在启动应用程序后第一次调用它时,所有数据都会按原样显示。当我移动到另一个 Viewcontroller 并返回到 tableview 时,它只显示一半的数据。我发现 viewwillappear 中的 [tableview reloaddata] 导致了这个问题。如果我将其注释掉,所有数据都会保持原样。因此,我认为在返回时检索数据时出现问题。我需要告诉数据来自 2 个不同的数组,这些数组填充了自定义 UITableViewCell 中的标签。由于我在设置此单元格时遇到了其他一些困难(标签不符合设置的约束),所以我首先认为标签可能不在视野范围内。但是现在我很确定其中一个数组的数据已经消失了。
有谁知道,第一次加载数据和重新加载数据有区别吗?是否可能是时间问题并且 tableviewcontroller 没有足够的时间来检索数据?如果是,我该怎么办?是否有其他原因导致它不起作用? 请告诉我是否应该发布一些代码。我不知道要显示什么来解决问题。
提前感谢您的感谢帮助。
`
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self fetchAllTermine]; //method to retrieve data from array #1
NSLog(@"viewWillAppear: %@", [self fetchAllTermine]);//logfile always shows data
events = (NSMutableArray*) [self getEventsFromCalendar]; //method to retrieve data from array #2 , events is a global variable
[self.tableView reloadData];//after reloadData data from array #1 are missing
}
-(NSMutableArray*)fetchAllTermine
{
NSFetchRequest<Termine *> *tfetchRequest = [Termine fetchRequest];
NSError *error ;
NSMutableArray * fetchedTermine = [[[self managedObjectContext] executeFetchRequest:tfetchRequest error:&error]mutableCopy];
self.termineArray = [[[self managedObjectContext] executeFetchRequest:tfetchRequest error:&error]mutableCopy];
// NSLog(@"fetchAllTermine in MonatTVC: %@", self.termineArray);
return fetchedTermine;
}
-(NSArray*)getEventsFromCalendar
{
[[EKEventStore new] requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (granted) {
NSLog(@"Access to calendar granted");
} else {
NSLog(@"No access to calendar");
}
}];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSArray *calendars = [[EKEventStore new] calendarsForEntityType:EKEntityTypeEvent];
NSDateComponents *tomorrowComponents = [[NSDateComponents alloc] init];
tomorrowComponents.month = 0;
NSDate *tomorrow = [calendar dateByAddingComponents:tomorrowComponents
toDate:[NSDate date]
options:0];
// Create the end date components
NSDateComponents *afterTomorrowComponents = [[NSDateComponents alloc] init];
afterTomorrowComponents.month = +1;
NSDate *afterTomorrow = [calendar dateByAddingComponents:afterTomorrowComponents
toDate:[NSDate date]
options:0];
NSPredicate *predicate = [[EKEventStore new] predicateForEventsWithStartDate:tomorrow
endDate:afterTomorrow
calendars:calendars];
NSArray *eventListe = [[EKEventStore new] eventsMatchingPredicate:predicate];
return eventListe;
}
`
【问题讨论】:
-
首先,提供的两个链接都显示相同的图片,就好像没有问题一样。你可能要重新检查一遍,否则就没用了。
-
两张图片都是一样的。 PI 重新检查附加图像
-
你的tableview self.termineArray 数组或事件数组的数据源是什么?
-
@Edy 和 Happily Hemu:谢谢你告诉我我加载了错误的图像。
-
@dreamBegin:两个数组都是数据源。 events.array 中的数据每次都能正确显示,但 self.termineArray 似乎与单元格的连接松动。
标签: ios objective-c uitableview reloaddata