0

ブロック経由でリモート コンテンツをロードするときは、reloadData を呼び出して UITableView を更新します。ただし、このデータをスクロールできません。これは、テーブル内の行数が、リストの内容を保持する NSArray 変数の長さであると宣言したためだと思います。ただし、これが呼び出されると、リストのカウントはゼロになります。tableView で reloadData を呼び出すと、リストのサイズが再計算されると想定していました。たぶん、私は途中で一歩を逃しています。ありがとうこれが私のコードです

 -(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    dispatch_async(kBgQueue, ^{
        NSData* data = [NSData dataWithContentsOfURL:
                        [NSURL URLWithString: @"MYURL"]];
        [self performSelectorOnMainThread:@selector(fetchedData:)
                               withObject:data waitUntilDone:YES];

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

    self.dataList = json;
    dispatch_async(dispatch_get_main_queue(), ^(void) {
        [self.tableView reloadData];
    });
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.dataList count];
}

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

    // Configure the cell...
    if([self.dataList count] > 0){
        NSDictionary *chartItem = [self.dataList objectAtIndex:indexPath.row];
        NSDictionary *song = [chartItem objectForKey:@"song"];
        cell.textLabel.text = [song objectForKey:@"title"];
    }

    return cell;
}
4

2 に答える 2

0

非同期呼び出しの最後に、jsonオブジェクト (したがって) が nil でないことを確認してください。self.dataListそうであれば、[self.dataList count]0 を返します。

また、正しく設定されていることを確認してくださいself.dataList.dataSource

于 2013-01-07T21:38:55.750 に答える
0

これは現在機能しています。問題の原因は、UITableView にパン ジェスチャを追加したことです。

[self.view addGestureRecognizer:self.slidingViewController.panGesture];

これは、テーブルをスクロールする機能を妨げているようです。うまくいけば、これは将来これに遭遇した人を助けるでしょう.

于 2013-01-07T22:08:59.850 に答える