我知道这是一个经常被问到的问题/问题。我已经查看了一堆Q& A的问题,但我想我有点厚,因为我没有在任何地方看到答案。
我有一个数组中的文件,我想用它来填充tableView。
问题在于它没有被调用。 numberOfRowsInSection或numberOfSectionsInTableView都不是。我可以看到,只有viewDidLoad被调用。
我有1个部分,我的数组中的元素数等于3(而不是nil)。
相关代码在这里......
- (void)viewDidLoad {
[super viewDidLoad];
FileControl *fileArray = [[FileControl alloc] init];
matArray = [fileArray findUniqueItemsInArray:0 :[fileArray setFileToArray]];
[fileArray release];
NSLog(@"%i \n %@", [matArray count], matArray); // matArray is filled.
NSLog(@"ViewDidLoad"); }
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
NSLog(@"CellForRowAtIndexPath");
NSString *text = [matArray objectAtIndex:[indexPath row]];
[[cell textLabel] setText:text];
return cell; }
@interface MaterialTableViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource> {
IBOutlet UITableView *materialTableView;
NSArray *matArray;
}
@property (nonatomic, retain) NSArray *matArray;
@end
其他方法是标准的。
我想我的问题在于我不能完全理解流程。
非常感谢任何帮助。提前谢谢。
答案 0 :(得分:2)
您是否已将UIViewController子类设置为有问题的UITableView的delegate
和dataSource
?如果不这样做,你所提到的方法都不会被调用。
答案 1 :(得分:2)
我想你使用的是UITableViewController
。
如果您使用的是UITableView
,则会有点复杂(在这种情况下,您需要实施UITableViewDelegate
,UITableViewDataSource
协议)。
[更新]这不是您的情况,您使用的是UITableViewController
。
将此行添加到viewDidLoad
方法的末尾:
[self.tableView reloadData];
或者移动它:
FileControl *fileArray = [[FileControl alloc] init];
matArray = [fileArray findUniqueItemsInArray:0 :[fileArray setFileToArray]];
[fileArray release];
到init
方法。您的init
方法应如下所示:
- (id)initWithStyle:(UITableViewStyle)style {
if ((self = [super initWithStyle:style])) {
FileControl *fileArray = [[FileControl alloc] init];
matArray = [fileArray findUniqueItemsInArray:0 :[fileArray setFileToArray]];
[fileArray release];
NSLog(@"%i \n %@", [matArray count], matArray); // matArray is filled.
NSLog(@"ViewDidLoad");
}
return self;
}
如果日志中没有显示任何消息,则表示您没有使用该方法初始化对象。
请在.m和.h文件中显示所有代码。
答案 2 :(得分:0)
我有个建议。只是试一试。在 - (void)viewDidLoad中声明了这个。
代替:matArray = [fileArray findUniqueItemsInArray:0 :[fileArray setFileToArray]];
使用此:matArray = [[NSArray alloc] initWithArray:[fileArray findUniqueItemsInArray:0 :[fileArray setFileToArray]]];
答案 3 :(得分:0)
你使用过
吗?- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.matArray count];
}
答案 4 :(得分:0)
确保已将tableview委托添加到.h文件中,如下所示。
@interface YourViewController : UIViewController <UITableViewDelegate> {
}
还要确保已在界面构建器中连接了数据源和委托。 这样做:
这应该“连接”使其运作所需的所有部分。
快乐编码!!