0

当我在代码中创建 UITableView 并将其添加为代码中的子视图时,一切正常。有绿色的 tableview 可见。我为此创建的代码示例。

- (void)getOverviewTable
{
  // Adding the TableView
  OverviewTableViewController *overviewTableViewController = [[OverviewTableViewController alloc] init];
  UITableView *overviewTableView = [[UITableView alloc] initWithFrame:(CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height))];

  // Set the datasource and delegete will come here

  [overviewTableView setBackgroundColor:[UIColor greenColor]];

  [self.view addSubview:overviewTableView];
}

但是在我为 TableView 设置了 DataSource 和 Delegete 之后,我会收到一个警告。达到它的总代码如下:

- (void)getOverviewTable
{
  // Adding the TableView
  OverviewTableViewController *overviewTableViewController = [[OverviewTableViewController alloc] init];
  UITableView *overviewTableView = [[UITableView alloc] initWithFrame:(CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height))];

  // Set the datasource and delegete will come here
  [overviewTableView setDataSource:overviewTableViewController];
  [overviewTableView setDelegate:overviewTableViewController];

  [overviewTableView setBackgroundColor:[UIColor greenColor]];

  [self.view addSubview:overviewTableView];
}

大多数时候它只是一个 EXC_BAD_ACCESS 错误,但有时它会显示以下错误。

[UITransitionView numberOfRowsInSection:]: unrecognized selector sent to instance

'OverViewTableViewController' 被一个空的 UITableViewController 类替换,但错误仍然出现。

(应用程序的要点是全屏接管,必须将其滑开才能看到其下方的表格视图)

编辑:

该函数是从 viewDidLoad 函数调用的

- (void)viewDidLoad
{
  [super viewDidLoad];
  // Do any additional setup after loading the view.

  [self.view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"bg.jpg"]]];

  // Setting the home takeover
  [self setHomeTakeOver];

  // Wait one seconde before we load the tableview
  [self getOverviewTable];
  //[self performSelector:@selector(getOverviewTable) withObject:nil afterDelay:1.0];
}
4

4 回答 4

5

我认为您启用了您的项目 ARC,并且从您的代码段中,我理解的是,overviewTableViewController一旦离开功能范围,就会通过 ARC 发布getOverviewTable。所以,最好在 .h 文件(@property (nonatomic, strong) OverviewTableViewController *overviewTableViewController;)中声明overviewTableViewController。如果你这样做,那么 .h 文件中的代码将如下所示

@property (nonatomic, strong) OverviewTableViewController *overviewTableViewController;

//// 我有强引用而不是赋值

在 .m 文件中

- (void)getOverviewTable
{
  // Adding the TableView
  overviewTableViewController = [[OverviewTableViewController alloc] init]; //// I have made  overviewTableViewController as member variable.
  UITableView *overviewTableView = [[UITableView alloc] initWithFrame:(CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height))];

  // Set the datasource and delegete will come here
  [overviewTableView setDataSource:overviewTableViewController];
  [overviewTableView setDelegate:overviewTableViewController];

  [overviewTableView setBackgroundColor:[UIColor greenColor]];

  [self.view addSubview:overviewTableView];
  [overviewTableView reloadData];
}

还要确保 OverviewTableViewController 已经实现了数据源方法,如

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
于 2013-06-19T13:48:36.480 回答
1

尝试这个。

  [overviewTableView setDataSource:self];
  [overviewTableView setDelegate:self];

还要确认tableviewDelegatedatasource执行以下方法。

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 10;
}
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier=@"CellIdentifier";
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell==nil)
    {
        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    return cell;
}
于 2013-06-19T12:40:35.190 回答
0

您可能忘记实现此方法。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
}
于 2013-06-19T12:33:16.163 回答
0

尝试将表视图控制器的 tableView 属性设置为overviewTableView。我不知道 UITableViewController 是否必须设置该属性。

- (void)getOverviewTable
{
  // Adding the TableView
  OverviewTableViewController *overviewTableViewController = [[OverviewTableViewController   alloc] init];
  UITableView *overviewTableView = [[UITableView alloc] initWithFrame:(CGRectMake(0, 0,     self.view.frame.size.width, self.view.frame.size.height))];

  // Set the datasource and delegete will come here
  [overviewTableView setDataSource:overviewTableViewController];
  [overviewTableView setDelegate:overviewTableViewController];

  //THIS IS THE NEW LINE
  //a UITableViewController needs to know UITableView that it's managing
  [overviewTableViewController setTableView:overviewTableView]; 

  [overviewTableView setBackgroundColor:[UIColor greenColor]];

  [self.view addSubview:overviewTableView];
}
于 2013-06-19T12:33:43.143 回答