0

LazyTableImages を Storyboards と ARC で動作させようとしています。プロジェクトがコンパイルされ、"Loading..." と Placeholder.png 画像が表示されます。私のログは、パーサーがほとんどのデータ (artist、appName) を取得しているが、サムネイル画像に問題がある (Bad 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 に答える