2015-01-11 4 views
0

Эта проблема возникла у двух моих контроллеров. Когда я запустил приложение, tableView даже не отображается, не говоря уже о данных, которые должны отображаться в таблице. Я не могу опубликовать снимок экрана, потому что моя репутация недостаточно высока.tableView не отображается

Вот мой код.

#import "OngoingTournamentTableViewController.h" 
#import "TournamentTableViewCell.h" 
#import "AppDelegate.h" 

#define kOngoingTournamentURL [NSURL URLWithString:@"https://www.kimonolabs.com/api/d4leq2cs?apikey=xgp4nU6xA9UcBWSe0MIHcBVbAWz5v4wR"] 


@interface OngoingTournamentTableViewController() 

@property (nonatomic, strong) NSArray *ongoingTournament; 

@end 

@implementation OngoingTournamentTableViewController 

- (void)viewDidLoad { 
[super viewDidLoad]; 

dispatch_async(kBgQueue, ^{ 
    NSData *data = [NSData dataWithContentsOfURL:kOngoingTournamentURL]; 
    [self performSelectorOnMainThread:@selector(fetchedTournamentData:) 
          withObject:data waitUntilDone:YES]; 
    }); 

    // Uncomment the following line to preserve selection between presentations. 
    // self.clearsSelectionOnViewWillAppear = NO; 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
    // self.navigationItem.rightBarButtonItem = self.editButtonItem; 
} 

- (void)didReceiveMemoryWarning { 
[super didReceiveMemoryWarning]; 
// Dispose of any resources that can be recreated. 
} 

- (void)fetchedTournamentData:(NSData *)tournamentResponseData { 
NSError *error; 
NSDictionary *json = [NSJSONSerialization 
         JSONObjectWithData:tournamentResponseData 
         options:kNilOptions 
         error:&error]; 

NSArray *myOngoingTournament = [[json objectForKey:@"results"] objectForKey:@"collection1"]; 

self.ongoingTournament = myOngoingTournament; 

[self.tableView reloadData]; 

NSLog(@"%@", self.ongoingTournament); 
} 

#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
// Return the number of sections. 
return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
// Return the number of rows in the section. 
return [self.ongoingTournament count]; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"tournamentCell" forIndexPath:indexPath]; 

if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"tournamentCell"]; 
} 

NSDictionary *tournaments = [self.ongoingTournament objectAtIndex:indexPath.row]; 

NSString *title = [[tournaments objectForKey:@"Title"] objectForKey:@"text"]; 
NSString *venue = [tournaments objectForKey:@"Venue"]; 

cell.textLabel.text = title; 
cell.detailTextLabel.text = venue; 

return cell; 
} 


@end 

Я назначил классы таблице tableView и прототипу. Какие-либо предложения?

И я ничего не получаю на консоли, но в браузере хорошо работает.

Спасибо заранее и снова извините за то, что являетесь такой бременем.

+0

не должен быть контроллером представления подкласса 'UITableViewController'? – rakeshbs

+1

Вызывается ли метод источника данных? –

+0

@PhillipMills, как я это делаю –

ответ

0

вам придется принимать протоколы uitableview и устанавливать делегат таблицы и источник данных.

, если файл заголовка вашего контроллера представления вам нужно будет искать что-то вроде этого

@interface myViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> 

затем в реализации йор где-то при настройке TableView

mytableview.delegate = self; 
mytableview.dataSource = self; 
0

Вы можете сделать это программно, как @myte сказал, или в раскадровке, и привяжите свой рабочий стол к контроллеру, а затем выберите «Delegate» и сделайте это снова с помощью «Datasource».

Затем в .h изменить @interface строку:

@interface myViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> 
+0

Я уже делал это в раскадровке, но он все еще не работал –

0

Загрузить данные с помощью NSURLConnection, как показано ниже. Позвоните по телефону f

NSURLRequest *urlRequest = [NSURLRequest requestWithURL:kOngoingTournamentURL]; 
NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 

[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 
{ 
    if (error == nil) 
    { 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self fetchedTournamentData:data] 
     }); 
    } 
}]; 
+0

Привет, спасибо за совет, но я сделал это, и он все еще не " t work –

+0

Можете ли вы проверить, является ли self.tableview нулевым? также проверьте, связаны ли они в раскадровке, а делегат и источник данных установлены. – rakeshbs

+0

эй, делегат и источник данных оба установлены –

Смежные вопросы