-5

私はこのObjectiveCプログラムとエラープリントアウトを持っています:

#import <UIKit/UIKit.h>

@interface TableViewController : UITableViewController

@end

------


#import "TableViewController.h"

@interface TableViewController ()

@end

@implementation TableViewController

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
#warning Potentially incomplete method implementation.
    // Return the number of sections.
    return 1; 
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
#warning Incomplete method implementation.
    // Return the number of rows in the section.
    return 50; 
}

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

    // Configure the cell...
    cell.textLabel.text = [NSString stringWithFormat:@"Zeile nummer %i",indexPath.row];
    return cell;
}

/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
*/

/*
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}
*/

/*
// 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;
}
*/

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.
    /*
     <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
     // ...
     // Pass the selected object to the new view controller.
     [self.navigationController pushViewController:detailViewController animated:YES];
     */
}



@end

ErrorCode:2012-09-16 21:05:36.204 renetest2 [1176:fb03] *-[UITableView _createPreparedCellForGlobalRow:withIndexPath:]、/ SourceCache / UIKit_Sim / UIKit-1914.84 / UITableView.m:60612012-09-16でのアサーションの失敗21:05:36.206 renetest2 [1176:fb03]*キャッチされなかった例外'NSInternalInconsistencyException'が原因でアプリを終了します。理由:' UITableView dataSourceはtableView:cellForRowAtIndexPathからセルを返す必要があります:' ***最初のスロー呼び出しスタック:(0x14b4022 0xeb4cd6 0x145ca48 0x9ae2c 0xb1d28 0xb23ce 0x9dcbd 0xac6f1 0x55d21 0x14b5e42 0x1d85679 0x1d8f579 0x1d144f7 0x1d163f6 0x1da3160 0x15e84 0x16767 0x25183 0x25c38 0x19634 0x139eef5 0x1488195 0x13ecff2 0x13eb8da 0x13ead84 0x13eac9b 0x15c65 0x17626 0x1cad 0x1c15 0x1の)例外(lldb)を投げると呼ばTERMINATE

4

3 に答える 3

0

上記のサンプルから、デキューされたセルがnilの場合、セルは作成されません。関数cellForRowAtIndexPathは次のようになります。

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

    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier: CellIdentifier];
    }

    // Configure the cell...
    cell.textLabel.text = [NSString stringWithFormat:@"Zeile nummer %i",indexPath.row];
    return cell;
}
于 2012-09-16T19:41:27.143 に答える
0

エラーはここにあります:

UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:

これは、ラインが

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

セルインスタンスをデキューできなかったため、メソッドはを返しnilます。

がnilであるかどうかを確認し、次の場合cellは新しいインスタンスを作成する必要があります。

if (nil == cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

これで、新しいUITableViewCellインスタンスを構成できるようになります。

于 2012-09-16T19:43:49.480 に答える
0

エラーを理解し、メソッドを調べてみてくださいtableView:cellForRowAtIndexPath。代わりに// Configure the cell...、セルを割り当て/初期化する必要があります。

于 2012-09-16T19:36:20.073 に答える