0

这个问题的前传就在这里

我正在尝试为我以编程方式创建的 UITableView 创建和设置自定义委托和数据源。我已经四处搜索,但找不到任何明确的解决方案来解决我的问题。

同时,我创建了一个符合 UITableViewDelegate、UITableViewDataSource 协议的新类。在这堂课中:

tableView numberOfRowsInSection: 20 tableView cellForRowAtIndexPath: cell.textLabel.text=@"Nominals";

包含 UIView 的类:

创建 UITableView 的方法:

-(IBAction)segmentValueChaged:(id)sender
{
if(self.segment.selectedSegmentIndex==0)
{
    [self.coinageView removeFromSuperview];
    [self.view addSubview:nominalsView];
    [self populateNominals:self.subCountryID];
}
else 
{
    [self.nominalsView removeFromSuperview];
    [self.view addSubview:coinageView];
    [self populateCoinages:self.subCountryID];
}
}

-(void)populateNominals:(int)subCountryID
{
NominalsTableViewDelegate *del=[[NominalsTableViewDelegate alloc]init];
UITableView *nominalsTableView=[[UITableView alloc]initWithFrame:CGRectMake(0, 0, 320, 372) style:UITableViewStylePlain];
[nominalsTableView setDelegate:del];
[nominalsTableView setDataSource:del];
[self.nominalsView addSubview:nominalsTableView];
[nominalsTableView reloadData];
}

最后,我得到了 EXC_BAD_ACCESS。邪恶在 [nominalsTableView setDelegate:del]; [nominalsTableView setDataSource:del]; 行。他们怎么了。

非常感谢您的帮助。提前致谢。

4

1 回答 1

0

我不确定您是否要在当前视图中添加新的 UITableView,但我会假设您正在这样做。

如果你有一个符合 UITableViewDelegate 的类。但是当我需要以编程方式创建 UITableView 时,我会创建一个新的 UITableView 类(带有 .h 和 .m),然后创建一个 MutableArray 并将其作为属性公开给父视图,以便它可以设置数据源。

从那里,您可以创建该类的一个实例以及数据源(您从子对象公开)。最后,您将视图添加到当前视图中。这种方法不需要设置委托,因为您的子类符合 tableview 委托协议。

如果您只是修改当前 tableview 中的数据,则使用 aNSMutableArray然后更改其中的数据。然后做一个

      [self.tableView reloadData];

希望这可以帮助!

已编辑

我可能误解了您的问题,您(很可能)需要做的是创建委托类的属性,然后创建您的委托类的实例并将其分配给该属性。

然后做一个

      [myTableView setDelegate:self.myProperty];
      [myTableView setDatasource:self.myProperty];

我相信,这会解决你糟糕的访问问题。

再次编辑

在 tableview 类的 .h 中创建一个属性,如下所示:

    @property (nonatomic, retain) NominalsTableViewDelegate *myDelegate;

从那里然后在您的 .m 文件中,您执行类似于此的操作:

NominalsTableViewDelegate* delegateClass = [[NominalsTableViewDelegate alloc] init];
[self setMyDelegate:delegateClass];
[delegateClass release];

然后你可以这样设置你的 tableview 数据源:

[myTableView setDelegate:self.myDelegate];
[myTableView setDatasource:self.myDelegate];

注意:我目前无法使用机器来测试它,但只是为了给你指出一些东西。

于 2012-08-21T16:44:06.467 回答