gpt4 book ai didi

ios - 滚动时 UItableView 弃用单元格

转载 作者:行者123 更新时间:2023-11-29 12:18:14 24 4
gpt4 key购买 nike

很抱歉再次发布这个问题,但我已经研究了很多答案,但没有一个对解决我的问题有帮助。

所以这是我的代码:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

static NSString *cellIdentifier = @"radioCell";

RadioTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[RadioTableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier];
}

[self configureCommentCell:cell atIndexPath:indexPath];



return cell;
}

当我向下滚动时,我的单元格变得困惑并且重复了一些数据,所以我试过这个:

static NSString *CellIdentifier = @"memberCell";
RadioCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[RadioTableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
}

还有这个:

    RadioTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];
if (cell == nil) {
cell = [[RadioTableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:nil];
}

但这并没有解决我的问题,我得到了白色的空单元格?请问如何解决这个问题?

更新

- (void)configureCommentCell:(RadioTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
NSDictionary *object;
if ([_dataArray[indexPath.section] isKindOfClass:[NSArray class]])
object = [_dataArray[indexPath.section] objectAtIndex:indexPath.row];
else
object = [[_dataArray[indexPath.section] valueForKey:@"radioList"] objectAtIndex:indexPath.row];

if (object[@"jsonUrl"]) {
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:object[@"jsonUrl"] parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
//NSDictionary *tempObject = (NSDictionary *) responseObject;
if (![[responseObject objectForKey:@"type"] isEqualToString:@"error"]) {
NSDictionary *tempObject = [responseObject[@"data"] objectAtIndex:0];
cell.playingNow.text = tempObject[@"song"];
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
}

cell.name.text = [NSString stringWithFormat:@" %@", object[@"title"]];
if (object[@"logoUrl"])
[cell.logo setImageWithURL:[NSURL URLWithString:object[@"logoUrl"]]];
}

最佳答案

我看到您的问题是您正在获取在 cellForRowAtIndexPath 中调用的 configureCommentCell 中的单元格数据。这是错误的,因为在 cellForRowAtIndexPath 中获取数据为时已晚,在此委托(delegate)方法中您应该返回单元格。

可以在从服务器检索数据之前调用此行:

cell.name.text = [NSString stringWithFormat:@"  %@", object[@"title"]];

相反,您应该:

  1. 在单独的方法中获取数据,例如 fetchData

  2. 当数据在 AFNetworking 方法的完成 block 中下载时,将数据存储在 NSArray 中,例如 myDataArray仍在完成 block 内调用 [self.tableView reloadData];

  3. 在 viewDidLoad 方法中调用你的方法 fetchData

    您的cellForRowAtIndexPath 应该如下所示:

     -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    // hey please give me the cell to display ... harry up please
    // please harry up ! oh my god you are fetching data from server
    // while I am asking for the cell !
    // ok I don't care do what you want
    // I will return an empty cell anyway
    // and guess what I will not take in consideration
    // the retried data because it's inside a block
    // which is called asynchronously


    static NSString *cellIdentifier = @"radioCell";

    RadioTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell == nil) {
    cell = [[RadioTableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier]; }

    // now before return the cell you need to update the content of cell
    // maybe you have an array of items and you should update the label
    // for example here and then return the cell

    cell.usernameLabel = self.myDataArray[indexPath.row]; // example


    return cell;
    }

关于ios - 滚动时 UItableView 弃用单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31455586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com