苹果手机:TabView + TableView
Posted
技术标签:
【中文标题】苹果手机:TabView + TableView【英文标题】:Iphone: TabView + TableView 【发布时间】:2010-10-07 16:39:00 【问题描述】:我想我遗漏了一些简单的东西,但我无法弄清楚它到底是什么。
我正在尝试使用UITabViewController
设置应用程序,其中一个选项卡将具有 UITableView 和 UISearchBar(但没有导航控制器)。我使用界面生成器中的所有选项卡设置了UITabViewController
,并且视图位于它们自己的 xib 文件中。带有UITableView
的选项卡的xib 文件设置和连接如下。
浏览器中的内容: 文件的所有者(类是我的自定义类,它是 UITableViewController 的子类)视图 -> 视图
View (class UIView, reference view -> File's owner) contains:
UITableView (if i try and set references to the data source / delegate, the app breaks)
UISearchBar (unconfigured at the moment)
此设置显示所有项目并且不会锁定,但是当我尝试使用 UITableView 加载选项卡时,我无法分配 DataSource 而不会崩溃。我应该怎么做才能将数据输入到这个表中,无论是在 IB 还是代码中?我的想法如下:
-
实现自定义 UITableView 类,连接到 IB 中的表格视图或 Xcode 中的自定义 tableviewcontroller。
将锤头或笔记本电脑靠在墙上,直到它工作为止。
更新: 这是当我连接 Tableview 的数据源并委托给文件所有者(谁的类是我的自定义 tableviewcontroller)时模拟器推送到控制台的错误。
2/14/09 6:59:12 PM TabBarWillbeRight[33172] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“* -[UIViewController tableView:numberOfRowsInSection:]:无法识别选择器发送到实例 0x523760
【问题讨论】:
【参考方案1】:我遇到了同样的问题。 1.确保您的视图实现数据源方法 2. 在 IB 中,将视图的 类标识 设置为实现数据源方法的类。 3. 右键单击 IB 中的视图并检查数据源是否连接到 Files Owner,而不是 View
【讨论】:
【参考方案2】:我有一个类似的问题,带有相同的错误消息。简单的解决方案是在 IB 中单击 TabBarController 中的视图(显示“视图加载自..”的灰色矩形)并将元素的类更改为我的 TableViewController 的类名。
【讨论】:
【参考方案3】:你确定你的类实现了 UITableViewDelegate 和 UITableViewDataSource 类吗?还要检查您的视图控制器的声明。你的 .h 文件应该是这样的
@interface MyClass:UIViewController <UITableViewDelegate,UITableViewDataSource>
其他一切似乎都已到位。如果类声明中没有指定实现 UITableViewDelegate 和 DataSource,那么一设置数据源就会出现异常。
【讨论】:
hmmm - 听起来可能就是这样。从那以后,我放弃了界面构建器并以编程方式创建了所有相关方法。故事的寓意:黑盒子一点也不好玩。 即使不使用 IB,也要确保类声明中提到该类实现了 UITableViewDelegate 和 UITableViewDataSource。【参考方案4】:如果您无法在不崩溃的情况下分配 DataSource,则表明某些 DataSource 委托方法尚未实现。
特别是你指定为数据源的类应该实现 UITableViewDataSource
【讨论】:
我实现了 numberOfSectionsInTableView、numberOfRowsInSection 和 cellForRowAtIndexPath,它们都返回 1 、 1 和一个带有静态 cell.text 的单元格。我错过了一个方法吗? 不应该是这样。虽然准确地说是 tableView:numberOfRowsInSection 和 tableView:cellForRowAtIndexPath 对 - 这就是它们的设置方式 - 那么我的数据源/委托到底应该是什么......我已经尝试使用 setDataSource: 和 setDelegate 进行设置。也许我错过了 AppDelegate.m 中的一些设置? 我会尝试在数据源和委托方法中放置断点,以查看它们是否被正确调用。这是我认为最好的调试方法。 只有当我尝试在 IB 中设置数据源和委托时它才会中断,但是当我在自定义 tableviewcontroller 的 viewwillappear 中使用它时,我得到一个没有数据的工作表。 [mytableview setDelegate:self]; [mytableview setDatasource:self]; self.tableview = mytableview;以上是关于苹果手机:TabView + TableView的主要内容,如果未能解决你的问题,请参考以下文章