Xcode 4,基于视图的应用程序+ UITableView在向上滚动时崩溃

时间:2011-09-15 22:41:40

标签: ios xcode uitableview crash scroll

在Xcode中,使用基于视图的应用程序模板(仅限iPhone)启动一个新项目。

在带有Interface Builder的视图(ProjectNameViewController.xib)的xib中,添加一个TableView。

创建一个新的UITableView的Objective-C类子类,在头文件中添加UITableViewDataSource协议并添加此属性:

NSArray *data;

在实现文件中实现2个必需的方法:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return [data count];
}

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

    static NSString* identifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];

    if (!cell) {

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
    }

    cell.textLabel.text = [data objectAtIndex:indexPath.row];

    return cell;
}

在init方法中添加:

data = [[NSArray arrayWithObjects:@"First", @"Second", @"Third", nil] retain];

返回Interface Builder,使用上一个自定义类(Identity检查器)添加一个新对象。 在UITableView中(在Connections检查器的Interface Builder中)将插座dataSource添加到上一个对象。

运行应用程序,它会显示包含数据的表格,然后当您向上滚动时,它会在主线程上发出信号:“EXC_BAD_ACCESS”(没有异常抛出)。

我对使用Cocoa Framework的Xcode + Interface Builder几乎不熟悉,我正在尝试了解Movel-View-Controller以创建具有可重用代码的应用程序,但我无法理解如何为make分割对象应用程序中每个UI元素的控制器,因为在这种情况下,如果我将方法放在由文件所有者子类分类的类中(协议与上面的类相同),它都可以工作。 但File的Owner的类是ViewController,我希望TableView与应用程序中的任何其他对象分开。如果这不是构建应用程序的方式(推荐方式),请告诉我。

提前致谢。

1 个答案:

答案 0 :(得分:3)

问题解决了。

在ViewController中添加2个IBOutlet:

一个用于UITableView,一个用于TableViewController(示例):

@interface ViewBasedAppViewController : UIViewController {

    IBOutlet UITableView *table;
    IBOutlet TableViewController *tableController;
}

TableViewController是一个NSObject。 在Interface Builder中连接插座: 从文件的所有者到表格选择“表格”; 从File的所有者到TableViewController对象选择“tableController”;