2014-11-14 2 views
0

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; 


} 

답변

0

내가이 줄이 표시되지는

[self.tableview reloadData];

+0

동일한 줄을 추가했지만 데이터를 새로 고칠 수 없습니다. 질문을 수정하겠습니다. – user3440782

+0

reloadData를 보낸 후에 cellForRowAtIndexPath가 호출되는지 확인하십시오. 그렇다면 데이터 구조가 제대로 업데이트되지 않습니다. reloadData가 별도의 메소드에서 호출되는 이유는 무엇입니까? NSURLRequest를 처리 한 직후에 전화하지 않는 이유는 무엇입니까? –

+0

예, reloadddata [NSURLRequest 이하]와 중단 점 cellForIndexPath에서 중단 점을 유지했습니다. 먼저 중단 된 breakpoint는 reloaddata이고 다음에 cellForIndexPath로 전달됩니다. – user3440782

0

데이터를 변경할 때마다 사후 주석을 사용하십시오. [[NSNotificationCenter defaultCenter] postNotificationName : @ "새로 고침"개체 : 자체];

관련 문제