Ios 当用户向服务器发送请求并且用户切换到另一个屏幕并返回到上一个屏幕时,UITableView数据不会重新加载
UITableView`当用户向服务器发送请求时,数据未重新加载,用户切换到另一个屏幕并返回到上一个屏幕,返回后,用户从服务器获得响应&根据响应表,视图未重新加载 但是,数组值已刷新Ios 当用户向服务器发送请求并且用户切换到另一个屏幕并返回到上一个屏幕时,UITableView数据不会重新加载,ios,objective-c,uitableview,Ios,Objective C,Uitableview,UITableView`当用户向服务器发送请求时,数据未重新加载,用户切换到另一个屏幕并返回到上一个屏幕,返回后,用户从服务器获得响应&根据响应表,视图未重新加载 但是,数组值已刷新 NSString *conString=[[[delegate.serverId stringByAppendingString:@"/ven/"] stringByAppendingString:[dict valueForKey:@"Item_Id"]] stringByAppendin
NSString *conString=[[[delegate.serverId stringByAppendingString:@"/ven/"] stringByAppendingString:[dict valueForKey:@"Item_Id"]] stringByAppendingString:@"/picture"];
NSLog(@"Post image in add image url %@",conString);
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:conString]];
[req setURL:[NSURL URLWithString:conString]];
[req setHTTPMethod:@"POST"];
NSString *boundary = @"0x0hHai1CanHazB0undar135";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[req addValue:contentType forHTTPHeaderField: @"Content-Type"];
// [req setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
NSString *token =delegate.Token;
NSLog(@"Token %@",token);
[req setValue:token forHTTPHeaderField:@"X-Auth-Token"];
NSMutableData *body = [NSMutableData data];
// NSLog(@"Image data in content upload %@",imageData);
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"picture\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[dict valueForKey:@"Value"]];
[body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
// mimeType
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"mimeType\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"%@",mimeType] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
// close form
[body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
// set request body
[req setHTTPBody:body];
[NSURLConnection sendAsynchronousRequest:req queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if (data) {
NSString* responseString = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding];
if ([responseString isEqualToString:@"The supplied authentication is not authorized to access this resource"]) {
//[self checkSessionOfUser];
[[NSNotificationCenter defaultCenter] postNotificationName:@"LogoutNotifyMyTask" object:nil];
}
else
{
NSString* responseString = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding];
NSLog(@"Respnse String Add Image%@",responseString);
NSError *error = nil;
NSDictionary *json=[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
NSLog(@"Result image %@ %@",json,[dict valueForKeyPath:@"Item_Id"]);
if ([json valueForKey:@"url"]) {
if ([myTaskIdMyTask containsObject:[dict valueForKey:@"Item_Id"]])
{
int addImageIndex=(int)[myTaskIdMyTask indexOfObject:[dict valueForKeyPath:@"Item_Id"]];
[updationStatusMyTask replaceObjectAtIndex:addImageIndex withObject:@"Completed"];
UITableView* myTab=(UITableView *)[self.view viewWithTag:-2];
[myTab beginUpdates];
[myTab reloadRowsAtIndexPaths:[NSArray arrayWithObjects:[NSIndexPath indexPathForRow:addImageIndex inSection:0], nil] withRowAnimation:UITableViewRowAnimationNone];
[myTab endUpdates];
}
}
else
{
}
}
}
else
{
}
} ];
获取数据后,请致电
[tableView reloadData]
。如果您确定您的请求已完成,并且您已将数据存储在tableView的数据源中,则返回时只需重新加载tableView:
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:YES];
[self.tableView reloadData];
}
但是如果在离开视图之前没有获取数据,那么这可能不起作用
希望这有帮助:) 我觉得你有点困惑。。。 那是什么
UITableView* myTab=(UITableView *)[self.view viewWithTag:-2];
myTab.delegate=self;
myTab.dataSource=self;
[myTab beginUpdates];
[myTab reloadRowsAtIndexPaths:[NSArray arrayWithObjects:[NSIndexPath indexPathForRow:addImageIndex inSection:0], nil] withRowAnimation:UITableViewRowAnimationNone];
[myTab endUpdates];
听着,我认为最好的方法是让ViewController只是一个简单的视图控制器。使用模型发送请求并组织tableview数据源。然后,当操作完成时,您必须使用委托方法调用VC来更新表。它更干净,更聪明一点
流程如下所示:
ViewController希望发送带有某些参数的请求。它将联系模型,模型将执行请求。模型将填充一个NSArray(或其他)属性,VC将使用该属性作为数据源。因此,模型完成了请求并详细说明了数据。然后,当它完成时,它将使用委托方法调用VC(对于ex-(void)yourModel:(yourModel*)model successfully更新数据;
)。因此,在委托方法中,您将调用-(void)reloadData
方法
我希望我是清楚的。再见,新年快乐。您能提供一些服务器响应处理的代码吗?发布一些代码将非常有用。如果在不同的控制器中检索到这些值,则在执行该步骤时是否将它们发送到表视图控制器?您的服务器代码是否在viewDidLoad中?否,对服务器的请求是从UITableView中的操作发出的感谢您的回复,但我的问题是,当请求转到服务器时,如果来自服务器的响应得到延迟,用户转到其他一些屏幕并返回到上一个屏幕,在这里,用户在一段时间后得到该请求的响应。值会根据响应进行更改,但不会重新加载数据。据我所知,之所以会发生这种情况,是因为向服务器发送的请求进入另一个线程,当用户返回时,表视图作为另一个线程工作。