这个问题已经在很多时候提到了这个问题,但是我的情况略有不同,我正在做的事情是UITabBarController里面有两个UITableViewController,当我切换到第二个UITableViewController时,没有触发cellForRowAtIndextPath方法来填充UITableViewController的数据是在通过互联网搜索许多解决方案后,使用 AFNetworking 从我的服务器中取出所有我发现的问题都不包括UITabBarController等 question 1,question 2,question 3,question 4,question 5,
这是我尝试使用的代码:
#import "newsAndEventTableViewController.h"
#import "SplashViewController.h"
#import "sharedVariables.h"
#import"AFNetworking.h"
#import "UIWebView+AFNetworking.h"
#import "SDWebImageCompat.h"
#import "SDWebImageDownloaderOperation.h"
#import "SDWebImageDownloader.h"
#import "MyGeeksTableViewController.h"
#import "geeksEvent.h"
@interface newsAndEventTableViewController ()
{
NSMutableArray *events;
geeksEvent *eventObject;
NSMutableArray *listOfEventsObjects;
}
@end
@implementation newsAndEventTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.delegate = self;
UIImage *image = [UIImage imageNamed:@"image.png"];
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:image];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [events count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:@"http://myserver.com/get.php" parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) {
// NSArray *products = [jsonDict objectForKey:@"images"];
// [products enumerateObjectsUsingBlock:^(id obj,NSUInteger idx, BOOL *stop){
// // NSString *productIconUrl = [obj objectForKey:@"imageUrl"];
//
// }];
//
NSLog(@"the response is: %@",responseObject);
events = [responseObject objectForKey:@"events"];
for (int i = 0; i < [events count];i++) {
eventObject = [events objectAtIndex:i];
[listOfEventsObjects addObject:eventObject];
}
}
failure:^(NSURLSessionTask *operation, NSError *error) {
NSLog(@"Error: %@", error);
UIAlertController * alert= [UIAlertController
alertControllerWithTitle:@"Error"
message:@"pls check your internet connection"
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* yesButton = [UIAlertAction
actionWithTitle:@"retry"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
//Handel your yes please button action here
}];
UIAlertAction* noButton = [UIAlertAction
actionWithTitle:@"No, Cancel"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
//Handel no, thanks button
}];
[alert addAction:yesButton];
[alert addAction:noButton];
[self presentViewController:alert animated:YES completion:nil];
}];
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// Configure the cell...
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Display recipe in the table cell
geeksEvent *event = [events objectAtIndex:indexPath.row];
UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100];
recipeImageView.image = [UIImage imageNamed:@"placeholderimage"];
UILabel *eventTitle = (UILabel *)[cell viewWithTag:200];
eventTitle.text = event.eventTitle;
NSLog(@"the event title is: %@",event.eventTitle);
UILabel *eventDesc = (UILabel *)[cell viewWithTag:300];
eventDesc.text = event.eventShortDiscription;
// Assign our own background image for the cell
// UIImage *background = [self cellBackgroundForRowAtIndexPath:indexPath];
// UIImageView *cellBackgroundView = [[UIImageView alloc] initWithImage:background];
// cellBackgroundView.image = background;
// cell.backgroundView = cellBackgroundView;
return cell;
}
/*
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:<#@"reuseIdentifier"#> forIndexPath:indexPath];
// Configure the cell...
return cell;
}
*/
/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
// Return NO if you do not want the specified item to be editable.
return YES;
}
*/
/*
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the row from the data source
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
} else if (editingStyle == UITableViewCellEditingStyleInsert) {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
*/
/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
}
*/
/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
// Return NO if you do not want the item to be re-orderable.
return YES;
}
*/
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
答案 0 :(得分:1)
success
请求的AFNetworking
块内的代码是异步调用的,这就是显示tableView
时没有数据的原因。
作为建议,您可能希望将AFNetworking
请求移出tableView:cellForRowAtIndexPath:
方法(例如viewDidLoad
),因为这会在每次应用想要显示时触发请求一个单元格,使应用程序无响应并消耗用户带宽。
因此,使用上述建议,代码将为:
#import "newsAndEventTableViewController.h"
#import "SplashViewController.h"
#import "sharedVariables.h"
#import"AFNetworking.h"
#import "UIWebView+AFNetworking.h"
#import "SDWebImageCompat.h"
#import "SDWebImageDownloaderOperation.h"
#import "SDWebImageDownloader.h"
#import "MyGeeksTableViewController.h"
#import "geeksEvent.h"
@interface newsAndEventTableViewController ()
{
NSMutableArray *events;
geeksEvent *eventObject;
NSMutableArray *listOfEventsObjects;
}
@end
@implementation newsAndEventTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.delegate = self;
UIImage *image = [UIImage imageNamed:@"image.png"];
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:image];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:@"http://myserver.com/get.php" parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) {
NSLog(@"the response is: %@",responseObject);
events = [responseObject objectForKey:@"events"];
for (int i = 0; i < [events count];i++) {
eventObject = [events objectAtIndex:i];
[listOfEventsObjects addObject:eventObject];
}
// Calling reload data after request is done
[self.tableView reloadData];
}
failure:^(NSURLSessionTask *operation, NSError *error) {
NSLog(@"Error: %@", error);
UIAlertController * alert= [UIAlertController
alertControllerWithTitle:@"Error"
message:@"pls check your internet connection"
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* yesButton = [UIAlertAction
actionWithTitle:@"retry"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
//Handel your yes please button action here
}];
UIAlertAction* noButton = [UIAlertAction
actionWithTitle:@"No, Cancel"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
//Handel no, thanks button
}];
[alert addAction:yesButton];
[alert addAction:noButton];
[self presentViewController:alert animated:YES completion:nil];
}];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [events count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// Configure the cell...
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Display recipe in the table cell
geeksEvent *event = [events objectAtIndex:indexPath.row];
UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100];
recipeImageView.image = [UIImage imageNamed:@"placeholderimage"];
UILabel *eventTitle = (UILabel *)[cell viewWithTag:200];
eventTitle.text = event.eventTitle;
NSLog(@"the event title is: %@",event.eventTitle);
UILabel *eventDesc = (UILabel *)[cell viewWithTag:300];
eventDesc.text = event.eventShortDiscription;
// Assign our own background image for the cell
// UIImage *background = [self cellBackgroundForRowAtIndexPath:indexPath];
// UIImageView *cellBackgroundView = [[UIImageView alloc] initWithImage:background];
// cellBackgroundView.image = background;
// cell.backgroundView = cellBackgroundView;
return cell;
}
@end