将UITableView添加到现有项目:添加数组以填充行时崩溃

时间:2012-05-04 11:05:39

标签: objective-c uitableview

我正在向一个项目中添加一个填充了国家/地区的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 dataSource必须从tableView返回一个单元格:cellForRowAtIndexPath:'... < / p>

CountryVieWController连接:

文件所有者的连接 奥特莱斯 dataSource - &gt;文件的所有者 代表 - &gt;文件所有者 引用Outlets 查看 - &gt;文件所有者

代码:

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

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

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

你需要这样的东西:

- (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;
}