无法重新加载UItableview
问题描述:
我有我的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;
}
答
我没有看到这条线
[self.tableview reloadData];
答
每当更改数据时都使用postnotification。 [[NSNotificationCenter defaultCenter] postNotificationName:@“refresh”object:self];
我添加了相同的行,但我无法刷新数据。让我编辑问题 – user3440782 2014-11-14 17:34:43
检查发送reloadData后是否调用cellForRowAtIndexPath。如果是这样,你没有正确地更新你的数据结构。为什么在单独的方法中调用reloadData?为什么不在处理NSURLRequest后立即调用它? – 2014-11-14 17:52:17
是的,我在reloadddata [在NSURLRequest下面]和cellForIndexPath中的一个断点处保留了一个断点,首先被命中的断点是reloaddata,然后转发到cellForIndexPath – user3440782 2014-11-14 18:56:11