UITableView에 4 개의 레이블 (프로젝트, 작업, 하위 작업 및 시간)이 포함 된 일부 데이터가 있었고, 데이터를 백엔드에서 데이터베이스로 변경하고 데이터를 변경했습니다. 시간 수를 12에서 10으로 변경했습니다. 그러나 UITableView에서 이전 데이터 (12 시간 대신 10 시간) 만 보았습니다. 아무도 그 뒤에있는 이유가 무엇인지 제안 할 수 있습니까? 내가 청소하려고, 데이터베이스에있는 올바른 데이터를로드하지 않는 컴퓨터를 다시 시작합니다. 추가 할 수있는 다른 사항은 웹 서비스의 도움으로 데이터를 검색한다는 것입니다. JSONSerialization 형식의 데이터를 NSArray로 변환합니다. 브라우저 URL에서 웹 서비스를 ping 할 때 정확한 데이터를 제공합니다. 여기에 아래의 코드 :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
reloadData를 보낸 후에 cellForRowAtIndexPath가 호출되는지 확인하십시오. 그렇다면 데이터 구조가 제대로 업데이트되지 않습니다. reloadData가 별도의 메소드에서 호출되는 이유는 무엇입니까? NSURLRequest를 처리 한 직후에 전화하지 않는 이유는 무엇입니까? –
예, reloadddata [NSURLRequest 이하]와 중단 점 cellForIndexPath에서 중단 점을 유지했습니다. 먼저 중단 된 breakpoint는 reloaddata이고 다음에 cellForIndexPath로 전달됩니다. – user3440782