Tvd
Tvd

Reputation: 4601

iOS Update Reload Contents Timer

In my VC I have a UITableView. Each cell has a UITableView as one of its contents. Timer is set updating each cell every 10secs. Events are handled which also reloads the respective cell.

Method that timer calls :-

-(void) updateVisitotsLists {

NSLog(@"UPDATING VISITORS LIST ***************************");

// Call API's to get lists
[api getVisitorsList];

// Init Arrays
browsingList = [MainAppDataObject sharedAppDataObject].visitors_browsingList;
secondList = [MainAppDataObject sharedAppDataObject].visitors_secondList;
thirdList = [MainAppDataObject sharedAppDataObject].visitors_thirdList;
fourthList = [MainAppDataObject sharedAppDataObject].visitors_fourthList;

// AS these are no more useful, so make it nil & save memory
[MainAppDataObject sharedAppDataObject].visitors_browsingList = nil;
[MainAppDataObject sharedAppDataObject].visitors_secondList = nil;
[MainAppDataObject sharedAppDataObject].visitors_thirdList = nil;
[MainAppDataObject sharedAppDataObject].visitors_fourthList = nil;

// Reload all lists with latest data
[self reloadBrowsingRow];
[self reloadSecondRow];
[self reloadThirdRow];
[self reloadFourthRow];
}

Event Handler Method :-

-(void) handleNewVisitor : (NSNotification *) notification {
// UPDATE VISITOR'S LIST
Visitor *v = [notification object];

@try {
    if (v != nil) {
        // Add V to browsing list
        [browsingList addObject:v];

        // Reload browsing list
        [self reloadBrowsingRow];

    }
}@catch (NSException *e) {
    NSLog(@"EXCEP - %@", e);
}
v = nil;

return;
}

Reloading Method -

-(void)reloadBrowsingRow {
// Browsing
VisitorsListsCell *bcell = (VisitorsListsCell*)[self.visitorlistsTv cellForRowAtIndexPath:[NSIndexPath indexPathForRow:2 inSection:0]];
[bcell.listsTableView reloadData];
[bcell updateButtonText];
[bcell setNeedsDisplay];
bcell = nil;

return;
}

The Problem :-

When updateVisitotsLists is called thru timer, the updated contents are not reflected on cell. When event handler method calls the same [self reloadBrowsingRow]; method, the contents of the cell are updated and reflected. Due to this despite cells contents are updated but are not reflected until the state of cell is changed - expanded or collapsed. I tried removing timer and cell updates properly on event caught, but when timer was on and event was caught, method is called but contents are not reflected on the screen.

I feel both methods may be calling reload method at same time, hence this must be happening or what ? How can this be handled making sure that the contents of cells are updated in any respect ? Any help is highly appreciated. Thanks.

Upvotes: 1

Views: 107

Answers (1)

Mohit
Mohit

Reputation: 3416

Use [tableview reloadData]; on that method. Because Reload on tableView will reload all data, so it will be more helpful.

Upvotes: 1

Related Questions