2

我正在向项目中添加一个 TableView,其中包含可供选择的国家/地区。添加新文件(iPad+XIB 的 UITableView 子类),编写触发 IBAction 代码(如果默认国家/地区不正确,则编辑文本字段),建立一些连接并出现空表视图。我已经阅读了几个教程,但我无法找出问题所在:当带有单词的数组加载到 - (void)viewDidLoad 时,应用程序崩溃并出现以下警告:

2012-05-04 12:34:36.740 pruebaF1[4017:f803] * 断言失败 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:], /SourceCache/UIKit_Sim/UIKit-1914.84/UITableView.m:6061 2012-05-04 12: 34:36.741 pruebaF1 [4017:f803] *由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“UITableView 数据源必须从 tableView:cellForRowAtIndexPath:”返回一个单元格...

CountryVieWController 连接:

文件所有者的连接 Outlets dataSource -> File's Owner 委托 -> File's Owner 引用 Outlets 视图 -> File's Owner

代码:

//  CountryTableVieWController.h
#import <UIKit/UIKit.h>
@interface CountryTableVieWController :      
UITableViewController<UITableViewDelegate,UITableViewDataSource> 

{
    NSMutableArray *countriesArray;
    NSArray *countryArray;
}
@end

//  CountryTableVieWController.m
#import "CountryTableVieWController.h"
#import "pruebaF1SecondViewController.h"

@interface CountryTableVieWController ()
@end

@implementation CountryTableVieWController

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

- (void)viewDidLoad
{   

    [super viewDidLoad];

    countriesArray = [[NSMutableArray alloc] initWithObjects:@"Austria", @"Italy", @"France",nil];
}

提前致谢。

4

1 回答 1

0

您需要为 UITableView 实现委托方法。

看看这个:http: //developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/CreateConfigureTableView/CreateConfigureTableView.html#//apple_ref/doc/uid/TP40007451-CH6-SW10

我发现最简单的方法是你的 UITableView 正在询问你的代码应该在单元格中做什么。您可以使用这些方法来配置您的表格视图和其中的 UITableViewCells。

你将需要这样的东西:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    [countriesArray count];
}


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

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

    NSString *country  = [countriesArray objectAtIndex:indexPath.row];
    cell.textLabel.text = country;
    return cell;
}
于 2012-05-04T11:40:04.293 回答