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を取得しています。悪は[nominalsTableViewsetDelegate:del]にあります。[nominalsTableView setDataSource:del]; 行。それらの何が問題になっていますか。

ヘルプは大歓迎です。前もって感謝します。

4

1 に答える 1

0

現在のビューに新しいUITableViewを追加しているかどうかはわかりませんが、追加していると想定します。

UITableViewDelegateに準拠するクラスがある場合。しかし、プログラムでUITableViewを作成する必要がある場合は、新しいUITableViewクラス(.hと.mを使用)を作成してから、MutableArrayを作成し、それをプロパティとして親ビューに公開して、データソースを設定できるようにします。

そこから、データソース(子オブジェクトから公開したもの)とともにクラスのインスタンスを作成できます。最後に、ビューを現在のビューに追加します。このメソッドでは、子クラスがテーブルビューデリゲートプロトコルに準拠しているため、デリゲートを設定する必要はありません。

現在のテーブルビュー内のデータを変更するだけの場合は、を使用してNSMutableArrayから、その中のデータを変更します。その後、

      [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];

次に、テーブルビューデータソースを次のように設定できます。

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

:私は現在、これをテストするためのマシンにアクセスできませんが、あなたに向ける何かを持っています。

于 2012-08-21T16:44:06.467 に答える