У меня были данные в моем UITableView с четырьмя ярлыками (проект, задачи, подзадачи и часы), я поменял свои данные из бэкэнд (перешел в базу данных и изменил данные). Я изменил количество часов с 12 до 10. Но я видел только старые данные (12 часов вместо 10 часов) в UITableView. Может ли кто-нибудь предположить, в чем причина этого. Я попытался очистить, перезагрузить компьютер, который не загружает правильные данные, находящиеся в базе данных. Другая вещь, которую я могу добавить, - это получение данных с помощью веб-сервиса. и преобразование данных из формата JSONSerialization в NSArray. Когда я просматриваю свою веб-службу в URL-адресе браузера, она дает мне правильные данные. Вот код ниже:Не удалось перезагрузить UItableview
- (void)viewDidLoad
{
[super viewDidLoad];
[self loadprojects];
}
NSString *strwebsite = [[NSUserDefaults standardUserDefaults] valueForKey:@"website"];
NSString *websitemethods = @"Timesheet.svc/GetTimesheet";
NSString *projecturltemp = [strwebsite stringByAppendingString:websitemethods];
NSString *str = [[NSUserDefaults standardUserDefaults] valueForKey:@"UserLoginIdSession"];
NSString *usrid = str;
NSString * projecturl =[NSString stringWithFormat:@"%@/%@/%@",projecturltemp,usrid,eventDate];
NSURL *url = [NSURL URLWithString:projecturl];
[self.tableView reloadData];
NSLog(@"url : %@", url);
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/projectpicker" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/jsonArray" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSError *error = [[NSError alloc] init];
NSHTTPURLResponse *response = nil;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
//NSLog(@"urlData : %@",urlData);
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url
cachePolicy:NSURLRequestReturnCacheDataElseLoad
timeoutInterval:30];
// Make synchronous request
urlData = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:&error];
if ([response statusCode] >= 200 && [response statusCode] < 300)
{
NSString *responseDatatest = [NSJSONSerialization JSONObjectWithData:urlData
options:NSJSONReadingAllowFragments error:&error];
NSLog(@"responseDatatest : %@",responseDatatest);
NSArray *entries = [NSJSONSerialization JSONObjectWithData:[responseDatatest dataUsingEncoding:NSUTF8StringEncoding]
options:0 error:&error];
NSLog(@"Entries : %@", entries);
if(!entries)
{
NSLog(@"Error : %@", error);
}
else{
for (NSDictionary *entry in entries) {
projectNames = [entries valueForKey:@"NM_PROJECT"];
taskNames = [entries valueForKey:@"TASk_NAME"];
subtaskNames = [entries valueForKey:@"SUBTASK_NAME"];
timesheetid = [entries valueForKey:@"ID_TIMESHEET_DTLS"];
projId = [entries valueForKey:@"ID_PROJECT"];
taskId = [entries valueForKey:@"ID_TASK"];
subtaskId = [entries valueForKey:@"ID_SUB_TASK"];
totalhours = [entries valueForKey:@"No_Hours"];
approve = [entries valueForKey:@"FL_APPROVE"];
leaves = [entries valueForKey:@"NM_LEAVE"];
}
}
} else {
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
#warning Potentially incomplete method implementation.
// Return the number of sections.
return 1;
}
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [projectNames count];
}
-(UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *identitifier = @"Cell";
TableViewCell * cell = [tableView
dequeueReusableCellWithIdentifier:identitifier
forIndexPath:indexPath];
if ([[[timesheetid objectAtIndex:indexPath.row] stringValue] isEqualToString:@"0"])
{
cell.lblProjects.text = [NSString stringWithFormat:@"%@",@"No Projects Filled"];
cell.lblTasks.text = [NSString stringWithFormat:@"%@",@"No Tasks Filled"];
cell.lblSubTasks.text = [NSString stringWithFormat:@"%@",@"No SubTasks Filled"];
cell.lblHours.text = [NSString stringWithFormat:@"%@",@"0 Hours Filled"];
cell.accessoryType = UITableViewCellAccessoryNone;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
else if ([[leaves objectAtIndex:indexPath.row] isEqualToString:@"0"])
{
cell.lblProjects.text = [projectNames objectAtIndex:indexPath.row];
cell.lblTasks.text = [taskNames objectAtIndex:indexPath.row];
cell.lblSubTasks.text = [subtaskNames objectAtIndex:indexPath.row];
cell.lblHours.text = [[totalhours objectAtIndex:indexPath.row] stringValue];
//NSLog(@"cell :%@",cell.lblHours.text);
}
else
{
cell.lblProjects.text = [leaves objectAtIndex:indexPath.row];
cell.lblTasks.text = [NSString stringWithFormat:@"%@",@"No Projects/Tasks on this Date"];
cell.lblSubTasks.text = [NSString stringWithFormat:@"%@",@"No Sub Tasks on this Date"];
cell.lblHours.text = [[totalhours objectAtIndex:indexPath.row] stringValue];
}
cell.editingAccessoryType = UITableViewCellAccessoryDetailDisclosureButton;
NSNumber *myProjectArrayString = [timesheetid objectAtIndex:indexPath.row];
cell.hdbrowcount = [NSString stringWithFormat:@"%@",myProjectArrayString];
return cell;
}
Я добавил ту же строку, но я не смог обновить данные. Позвольте мне изменить вопрос – user3440782
Проверьте, вызывается ли cellForRowAtIndexPath после отправки reloadData. Если это так, вы неправильно обновляете свою структуру данных. Почему reloadData вызывается отдельным методом? Почему бы вам не сразу вызвать его после обработки NSURLRequest? –
Да, я сохранил точку останова в reloadddata [ниже NSURLRequest] и точку останова на cellForIndexPath, точка останова, которая была первой, была перезагружена, а затем перешла на cellForIndexPath – user3440782