我有一个场景,我的 tableview 重新加载不起作用。请让我知道我是否正确建模了我的设计或者我需要更改它。
- 我有一个核心视图控制器,每个标签栏视图控制器都继承自这个核心视图控制器
- 每个标签栏视图控制器都有一个 tableview 并实现 UITableViewDelegate 和 UITableViewDataSource 协议。
- 如果应用程序是第一次启动,在核心视图控制器的 viewDidLoad 中,我有一个从 web 获取数据的方法。在子视图控制器的 viewDidLoad 方法中,我有一个填充 tableview 数据源的方法。
- 所以问题出在第一次启动时,数据被成功获取并保存在核心数据中,但它没有重新加载表格视图,所以它是空的。
所以目前按照下面的代码,在第一次启动时,我看到警报视图,然后是加载视图,我看到数据保存在核心数据中。但是第一个选项卡栏的表格视图加载为空而没有数据,原因是它的[未调用重新加载]。但是在下次启动时,数据就在那里。
下面是代码
核心视图控制器
- (void)viewDidLoad
{
[super viewDidLoad];
if (!self.myManagedObjectContext) {
//Get Shared Instance of managedObjectContext
self.myManagedObjectContext = [LTDataModel sharedInstance].mainObjectContext;
//Check if managed object context has required data
......
if (<data not found> {
[self fetchDataIntoContext];
}
}
-(void)fetchDataIntoContext {
UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Initializing..."
message:@"This is your first launch of App"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[message show];
UIView *loadingView = [[UILoadingView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:loadingView];
dispatch_queue_t fetchEventQ = dispatch_queue_create("Fetcher", NULL);
dispatch_async(fetchEventQ, ^{
<add data to core data>
[[LTDataModel sharedInstance] save];
dispatch_async(dispatch_get_main_queue(), ^{
[[self.view.subviews lastObject] removeFromSuperview];
});
});
}
子视图控制器
--(void)setMyArrayOfEvents:(NSMutableArray *)myArrayOfEvents {
if (_arrayOfMyEvents != arrayOfMyEvents) {
_arrayOfMyEvents = arrayOfMyEvents;
[self.eventTableView reloadData];
}
}
-(void) viewDidLoad {
[super viewDidLoad];
//Get Shared Instance of managedObjectContext if it does not exist
if (!self.myManagedObjectContext) {
self.myManagedObjectContext = [LTDataModel sharedInstance].mainObjectContext;
}
//Populate the array which feeds the tableview
[self populateTableViewArrayFromContext];
}
-(void)populateTableViewArrayFromContext
{
<Fetch data dfrom Core Data ......>
self.myArrayOfEvents = [[NSMutableArray alloc] initWithArray:localArray];
}