在 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/