iOS 5,Storyboards,ARC:创建和设置自定义委托和数据源以进行编程。创建了UITableView

时间:2012-08-21 16:28:02

标签: ios cocoa-touch uitableview

此问题的前提是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];行。他们有什么问题。

非常感谢帮助。提前谢谢。

1 个答案:

答案 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];

注意 :我目前无法使用计算机来测试此功能,但只是指向您。