0

私はこのアプリに取り組んでいますが、どういうわけか、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私が尋ねたデータを返していますが、行を取得できないようです。誰かが私に手を差し伸べてもらえますか?tnx

4

2 に答える 2

0

簡単な答え-データ配列の読み込みが完了したら、[(テーブルビュー)reloadData]を呼び出す必要があります。

おそらく、現在ストーリーボードにテーブルビューがあり、そのデータソースを設定してビューコントローラに委任していると思われます。また、ViewControllerにそのテーブルビューのプロパティが必要です。このようなコードがあるかもしれません。

@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
于 2012-10-01T20:13:00.740 に答える
0

私の推測では、から有効なセルが返されることはありませんdequeueReusableCell。私がお勧めするのは、セルを再利用しようとした後、それがゼロかどうかを確認し、ゼロである場合は、新しいセルを割り当てる必要があるかどうかを確認することです。関数にコードを追加しました。

- (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; }
于 2012-10-01T20:34:30.300 に答える