簡體   English   中英

表格視圖未顯示

[英]table view not showing

我正在使用此應用程序,但是不知何故,它沒有在tableviewcontroller中返回任何行。 這是我的代碼:

#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
#define kStudentenURL [NSURL URLWithString:@"http://localhost/api/api.php"] 

#import "MasterViewController.h"

#import "DetailViewController.h"


@interface MasterViewController () {
    NSArray *_studenten; } @end

@implementation MasterViewController

- (void)awakeFromNib {
    [super awakeFromNib]; }

- (void)viewDidLoad {
    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.
    // The hud will dispable all input on the view (use the higest view possible in the view hierarchy)     HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];  [self.navigationController.view addSubview:HUD];        // Regiser for HUD callbacks so we can remove it from the window at the right time  HUD.delegate = self;        // Show the HUD while the provided method executes in a new thread  [HUD showWhileExecuting:@selector(getJsonDataFromServer) onTarget:self withObject:nil animated:YES]; }

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


-(void)getJsonDataFromServer {
    dispatch_async(kBgQueue, ^{
        NSData* data = [NSData dataWithContentsOfURL:
                        kStudentenURL];
        [self performSelectorOnMainThread:@selector(fetchedData:)
                               withObject:data waitUntilDone:YES];
    }); }

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

    _studenten = [json objectForKey:@"studenten"];

    NSLog(@"Studenten: %@", _studenten);
    NSLog(@"%u", _studenten.count); }

#pragma mark - Table View

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1; }

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return _studenten.count; }

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

    NSDictionary *student = [_studenten objectAtIndex:0];

    NSString *studentNaam = [student objectForKey:@"studentNaam"];
    NSString *studentAchterNaam = [student objectForKey:@"studentAchterNaam"];

    cell.textLabel.text = studentAchterNaam;
    cell.detailTextLabel.text = studentNaam;


    return cell; }

/* // 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; }
*/

/*- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"showDetail"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        NSDate *object = _objects[indexPath.row];
        [[segue destinationViewController] setDetailItem:object];
    } }*/

@end

我知道我的json正確輸入。 NSLog s返回我詢問的數據,但是我似乎無法獲得任何行。 有人可以幫我嗎? n

簡單的答案-完成數據數組的加載后,您需要調用[(您的tableview)reloadData]!

大概您現在已經在情節提要上獲得了表格視圖,並且已經設置了它的數據源並委托給視圖控制器。 您還需要在該視圖中的視圖控制器中具有一個屬性。 您可能會有一些看起來像這樣的代碼。

@interface MasterViewController () {
    NSArray *_studenten;
}

@property (weak, nonatomic) IBOutlet UITableView *tableView;

@end

@implementation MasterViewController
- (void)fetchedData:(NSData *)responseData {
    NSError* error;
    NSDictionary *json = [NSJSONSerialization
                      JSONObjectWithData:responseData                           
                      options:kNilOptions
                      error:&error];

    _studenten = [json objectForKey:@"studenten"];

    NSLog(@"Studenten: %@", _studenten);
    NSLog(@"%u", _studenten.count);
    [self.tableView reloadData];
}
@end

我的猜測是,您永遠不會從dequeueReusableCell返回有效的單元格。 我建議做的是在嘗試重用單元格之后,檢查它是否為nil,如果是,則需要分配一個新的單元格。 我已將代碼添加到您的函數中。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    if(!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"];
    }

    NSDictionary *student = [_studenten objectAtIndex:0];

    NSString *studentNaam = [student objectForKey:@"studentNaam"];
    NSString *studentAchterNaam = [student objectForKey:@"studentAchterNaam"];

    cell.textLabel.text = studentAchterNaam;
    cell.detailTextLabel.text = studentNaam;

    return cell; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM