0

我正在尝试让 LazyTableImages 与 Storyboards 和 ARC 一起使用。我的项目编译并显示“正在加载...”和 Placeholder.png 图像。我的日志显示解析器正在检索大部分数据(艺术家、应用程序名称),但缩略图图像有问题(错误 URL)。最大的问题似乎在这里(nodeCount 的 NSLog 始终为零)。

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

    NSLog(@"RootViewController - tableView cellForRowAtIndexPath");

    // customize the appearance of table view cells
    static NSString *CellIdentifier = @"Cell";
    static NSString *PlaceholderCellIdentifier = @"PlaceholderCell";

    // add a placeholder cell while waiting on table data
    int nodeCount = [self.entries count];

    NSLog(@"RootViewController - nodeCount is %d",nodeCount);

    if (nodeCount == 0 && indexPath.row == 0)
    {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:PlaceholderCellIdentifier];
        if (cell == nil)
        {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle                             
                                          reuseIdentifier:PlaceholderCellIdentifier];   
            cell.detailTextLabel.textAlignment = UITextAlignmentCenter;
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
        }

        cell.detailTextLabel.text = @"Loading…";
        return cell;
    }

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle                                    
                                      reuseIdentifier:CellIdentifier];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }

    NSLog(@"RootViewController - nodeCount2 is %d",nodeCount);

    // Leave cells empty if there's no data yet
    if (nodeCount > 0)
    {
        NSLog(@"RootViewController - nodeCount3 is %d",nodeCount); //this one never gets displayed

        // Set up the cell...
        AppRecord *appRecord = [self.entries objectAtIndex:indexPath.row];

        cell.textLabel.text = appRecord.appName;
        cell.detailTextLabel.text = appRecord.artist;

        // Only load cached images; defer new downloads until scrolling ends
        if (!appRecord.appIcon)
        {
            if (self.tableView.dragging == NO && self.tableView.decelerating == NO)
            {
                [self startIconDownload:appRecord forIndexPath:indexPath];
            }
            // if a download is deferred or in progress, return a placeholder image
            cell.imageView.image = [UIImage imageNamed:@"Placeholder.png"];                
        }
        else
        {
            cell.imageView.image = appRecord.appIcon;
        }

        NSLog(@"RootViewController - nodeCount4 is %d",nodeCount);
    }

    return cell;
}
4

1 回答 1

0

问题是因为用于设置 RootViewController 的 AppDelegate 方法在使用 NIB 和 Storyboard 之间是不同的......因此它没有得到分配。将以下内容添加到 applicationDidLaunch 解决了它:

rootViewController = [[RootViewController alloc] init]; 
self.window.rootViewController = self.rootViewController; 
[window addSubview:rootViewController.view]; 
[window makeKeyAndVisible];  

在这些条目被分配给 RootViewController 之后,如下所示:

self.appRecords = [NSMutableArray array]; 
rootViewController.entries = self.appRecords; 

...所以如果 rootViewController 不存在,条目就不能存在...

于 2012-09-07T14:44:08.623 回答