2014-11-14 113 views
0

我有我的UITableView有四个标签(项目,任务,子任务和小时)的一些数据,我改变了我的数据从后端(去数据库和更改数据)。我将小时数从12更改为10.但是我只在我的UITableView中看到旧数据(12小时而不是10小时)。任何人都可以提出背后的原因。我试图清理,重新启动不加载数据库中正确数据的计算机。我可以补充的其他事情是我正在借助Web服务检索数据。并将数据从JSONSerialization格式转换为NSArray。当我在浏览器URL中ping我的web服务时,它给了我正确的数据。这是下面的代码:无法重新加载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 2014-11-14 17:34:43

+0

检查发送reloadData后是否调用cellForRowAtIndexPath。如果是这样,你没有正确地更新你的数据结构。为什么在单独的方法中调用reloadData?为什么不在处理NSURLRequest后立即调用它? – 2014-11-14 17:52:17

+0

是的,我在reloadddata [在NSURLRequest下面]和cellForIndexPath中的一个断点处保留了一个断点,首先被命中的断点是reloaddata,然后转发到cellForIndexPath – user3440782 2014-11-14 18:56:11

0

每当更改数据时都使用postnotification。 [[NSNotificationCenter defaultCenter] postNotificationName:@“refresh”object:self];