无法在PopOverController中填充TableView – Objective C

我有一个名为UploadButtonUIButton 。 我正在使用以下几行代码来处理点击时应该发生的操作::

 -(IBAction)UploadButtonPressed:(id)sender{ self.Upload = [[UploadSpaceTableViewController alloc] initWithStyle:UITableViewStylePlain]; self.UploadTableViewPopover = [[UIPopoverController alloc] initWithContentViewController:Upload]; [self.UploadTableViewPopover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; } 

在这里, UploadSpaceTableViewController是我所做的一个独立的类。 它有以下function::

 - (void)viewDidLoad { [super viewDidLoad]; self.clearsSelectionOnViewWillAppear = NO; self.contentSizeForViewInPopover = CGSizeMake(150.0, 140.0); self.keys1 = [NSMutableArray array]; [keys1 addObject:@"Red"]; [keys1 addObject:@"Green"]; [keys1 addObject:@"Blue"]; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // Return the number of sections. return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section. return [keys1 count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; // Configure the cell... NSString *key1 = [keys1 objectAtIndex:indexPath.row]; cell.textLabel.text = key1; return cell; } 

基本上,我想要的是在单击我的UItableViewUIPopOverController显示一个UploadButton

但是,在运行上面的代码行我得到以下错误在gdb ::

 splitView[4486:f803] *** Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:], /SourceCache/UIKit_Sim/UIKit-1914.84/UITableView.m:6061 2012-06-27 14:05:05.531 splitView[4486:f803] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath: 

这是我第一次尝试在UIPopoverController显示UITableView 。 我已经在代码中尝试了很多变体,但是我无法将其整理出来。 有人可以帮我吗 ?? 感谢致敬。

你有没有分配你的单元格,我认为你的代码会返回nill

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if(cell == nill){ cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } // Configure the cell... NSString *key1 = [keys1 objectAtIndex:indexPath.row]; cell.textLabel.text = key1; return cell; } 

可能这会帮助你…

这个错误意味着当你给keys1, self.keys1 = ...分配一个值时,你传递了一个无效的参数。 如果你是,例如,传递一个NSMutableArray到一个NSDictionary属性,你会得到这个错误。

问题是以下行:

 self.keys1 = [NSMutableArray array]; 

您的UploadSpaceTableViewController没有方法setKeys /没有属性键。

编辑第二个错误消息:

UITableView数据源必须从tableView中返回一个单元格:cellForRowAtIndexPath:

这意味着你应该实现UITableViewDataSource方法tableView:cellForRowAtIndexPath:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { //configure your cell here return myCongiuredTableViewCell; } 

在cellForRowAtIndexPath中使用以下代码:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; // Configure the cell... if( cell == nil ) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } NSString *key1 = [keys1 objectAtIndex:indexPath.row]; cell.textLabel.text = key1; return cell; } 

我认为这可能对你有帮助。