0
我有一個場景,我的tableview重新加載不工作。請讓我知道,如果我已經正確地建模我的設計,或者我需要改變它。Tableview重新加載不能用於父VC/Child VC場景
- 我具有芯視圖控制器和每個選項卡欄視圖控制器從該芯視圖控制器
- 繼承每個標籤欄視圖控制器具有的tableview並實現的UITableViewDelegate和UITableViewDataSource協議。
- 如果該應用程序是第一次啓動,在覈心視圖控制器的viewDidLoad中,我有一個方法來從Web獲取數據。在子視圖控制器的viewDidLoad方法中,我有一個填充tableview數據源的方法。
- 所以問題是在第一次啓動時,數據在Core數據中被成功獲取並保存,但它不會重新加載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];
}