普通视图控制器内的表格视图
Posted
技术标签:
【中文标题】普通视图控制器内的表格视图【英文标题】:Table view inside a normal view controller 【发布时间】:2012-07-22 18:57:37 【问题描述】:我正在做这个 iPhone 项目,我需要在普通视图控制器内有一个(动态)表视图。我没有选择 Table View Controller,因为我需要在页面中放置其他东西。想象一个包含文本字段、按钮和大约 4-5 个单元格的小表格视图的页面。
当我运行应用程序时,我需要触摸一个按钮来切换到该视图。我单击按钮,应用程序崩溃并告诉我:
2012-07-22 14:40:57.304 多少?[3055:f803] * 断言失败 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:], /SourceCache/UIKit_Sim/UIKit-1914.84/UITableView.m:6061
这是我的 .H 文件:
#import <UIKit/UIKit.h>
@interface ProjectViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@end
这是我的 .M 文件:
#import "ProjectViewController.h"
@interface ProjectViewController ()
@end
@implementation ProjectViewController
//MyViewController.m
#pragma mark - Table View Data Source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
NSLog(@"numberOfSectionsInTableView");
return 1;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
NSLog(@"numberOfRowsInSection");
return 5;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
NSLog(@"cellForRowAtIndexPath");
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
NSLog(@"cellForRowAtIndexPath");
cell.textLabel.text = @"Test";
return cell;
@end
我从表格视图控制拖动到我的控制器来设置委托和数据源。
我做错了什么??
感谢您的帮助。
【问题讨论】:
你能给我们看看.h文件吗? @interface ProjectViewController:UIViewController尝试在您的.h
文件中创建一个插座并将其连接到您的storyboard
中的tableView
ProjectViewController.h
@property (nonatomic, strong) IBOutlet UITableView *myTableView;
ProjectViewController.m
@synthesize myTableView;
...
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
NSLog(@"cellForRowAtIndexPath");
UITableViewCell *cell = [self.myTableView dequeueReusableCellWithIdentifier:@"cell"];
NSLog(@"cellForRowAtIndexPath");
cell.textLabel.text = @"Test";
return cell;
【讨论】:
现在,这是我的一个愚蠢的错误!我要为我的表格视图创建一个出口。那么现在它工作得很好:) 谢谢你。对于那些有同样问题的人:在你的 .H 文件中添加以下内容:@property (weak, nonatomic) IBOutlet UITableView *tableView; 我编辑的太多,所以我的答案重新出现在您的评论下!无论如何感谢您的帮助,晚安! 你用过ARC吗?如果没有,你可以拥有这个:@property (nonatomic, retain) IBOutlet UITableView *myTableView; @AnthonyGuay 也许你没有使用 ARC @AnthonyGuay 如果 luyuan 帮助了你,那么请点击他们答案旁边的复选标记来接受答案,以便他们获得荣誉,这是你感谢他们的方式。欢迎来到 SO(堆栈溢出)!【参考方案2】:在你的 -cellForRowAtIndexPath 中,如果你这样做,你会没事的。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
NSLog(@"cellForRowAtIndexPath");
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if(cell == nil)
cell = [[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:@"cell"];
NSLog(@"cellForRowAtIndexPath");
cell.textLabel.text = @"Test";
return cell;
问题是您的单元从未分配和初始化内存。这就是您收到错误的原因。
【讨论】:
以上是关于普通视图控制器内的表格视图的主要内容,如果未能解决你的问题,请参考以下文章