我的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;
}
`
答案 0 :(得分:0)
您应该复制数组数据以将其显示在单元格上。否则,您将无法获得想要显示的总数据。
答案 1 :(得分:0)
快速浏览一下您的代码可能有什么问题。在viewWillAppear()中使用reloadData是不可行的:
除此之外,没有足够的代码来查看其他错误。在viewDidLoad中如何初始化表,如何创建和填充单元格,等等。
答案 2 :(得分:0)
感谢所有回答我问题的人。现在,我找到了解决问题的方法。第一次初始化后,每次回到表视图时,我都会重写terminData-Array。现在一切正常,我可以使用两个并行数组在tableview中填充数据。
BR
Debhelapara