ios - Xcode 4,基于 View 的应用程序 + UITableView 向上滚动时崩溃

标签 ios xcode uitableview crash scroll

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

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

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

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,使用先前的自定义类(身份检查器)添加一个新对象。 在 UITableView 中(在 Connections 检查器上的 Interface Builder 中)将导出数据源添加到前一个对象。

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

我对带有 Cocoa 框架的 Xcode + Interface Builder 几乎不陌生,我试图了解 Movel-View-Controller 来创建具有可重用代码的应用程序,但我不明白如何为 make 划分对象应用程序中每个 UI 元素的 Controller ,因为在这种情况下,如果我将方法放在由文件所有者子类化的类上(协议(protocol)与上面的类相同),那么一切都会起作用。 但文件所有者的类是 ViewController,我希望 TableView 与应用程序中的任何其他对象分开。如果这不是构建应用程序的方式(推荐方式),请告诉我。

提前致谢。

最佳答案

问题已解决。

在ViewController中添加2个IBOutlet:

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

@interface ViewBasedAppViewController : UIViewController {

    IBOutlet UITableView *table;
    IBOutlet TableViewController *tableController;
}

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

关于ios - Xcode 4,基于 View 的应用程序 + UITableView 向上滚动时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7438285/

相关文章:

ios - 缺少私钥

ios - 推送和弹出 VC 后,UITableViewCell selectedBackgroundView 保持按下状态

ios - "didSelectRowAtIndexPath"方法从未在 iOS 10 设备上调用

objective-c - 强制 CLGeocoder block 代码同步运行

ios - 如何以编程方式获取 iOS 崩溃日志?

ios - 构建和模拟应用程序时 Xcode 7 白屏

swift - SwipeCellKit 删除 tableView 中的最后一行会产生错误

ios - 除了 UITableViewController 之外,还有什么方法可以在 UIViewController 中使用原型(prototype)单元吗?

c++ - 如何为 iphone 编译一个简约的 cpp Protocol Buffer 库?

xcode - App Store 提交了两个成对工作的相关应用程序