此问题的前提是here。
我正在尝试创建并设置自定义委托和数据源到我以编程方式创建的UITableView。我已经google了一下,但找不到任何明确的解决方案。
同时,我创建了一个符合UITableViewDelegate,UITableViewDataSource的新类 协议。在这堂课中:
tableView numberOfRowsInSection:20 tableView cellForRowAtIndexPath:cell.textLabel.text = @“Nominals”;
包含UIViews的类:
创建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];行。他们有什么问题。
非常感谢帮助。提前谢谢。
答案 0 :(得分:0)
我不确定您是否要在当前视图中添加新的UITableView,但我会假设您正在这样做。
如果你有一个符合UITableViewDelegate的类。但是当我需要以编程方式创建UITableView时,我创建了一个新的UITableView类(使用.h和.m)然后创建一个MutableArray并将其作为属性公开给父视图,以便它可以设置数据源。
从那里,您可以创建类的实例以及数据源(您从子对象公开的数据源)。最后,您将视图添加到当前视图中。这个方法你不需要设置委托,因为你的子类符合tableview委托协议。
如果您只是修改当前tableview中的数据,则使用NSMutableArray
然后更改其中的数据。之后再做一次
[self.tableView reloadData];
希望这有帮助!
<强> EDITED 强>
我可能误解了你的问题,你(最有可能)需要做的是创建委托类的属性,然后创建delgate类的实例并将其分配给属性。
然后做一个
[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];
注意 :我目前无法使用计算机来测试此功能,但只是指向您。