0

UIViewController(ViewControllerA)があり、これに画面の一部を占めるサブビュー(という名前)UIViewControllerを追加したいと思います。と呼ばれるのクラスをすでに作成しています。UITableViewTableLoadGroupMembersViewControllerUITableViewTableLoadGroupMembersViewController

私は次の方法でViewControllerA.hインポートTableLoadGroupMembersViewControllerしました:

#import "TableLoadGroupMembersViewController.h"

ボタンが押されたときViewcontrollerA.mのスルーコードを作成したい。からコンテンツをロードしUITableViewたいと思います。の情報を読み取るように を設定するにはどうすればよいですか?UITableViewTableLoadGroupMembersViewControllerUITableViewTableLoadGroupMembersViewController

私はこのようにしてみました:

UITableView* tableVIEW = [[UITableView alloc]init];
TableLoadGroupMembersViewController* tableDelegate = [[TableLoadGroupMembersViewController     alloc] init];
[tableVIEW setDelegate:tableDelegate];
[tableVIEW setDataSource:tableDelegate];

[self.view addSubview:tableVIEW]; 

しかし、それはアプリをクラッシュさせます。どうすればいいですか?

編集:

これは与えられたエラーです:

0x387209b:  movl   8(%edx), %edi   ....  Thread 1 EXE Bad access
4

1 に答える 1

1

UITableView はその dataSource またはデリゲートを保持せず、それらは割り当てられるだけです。

そのため、ARC を使用TableLoadGroupMembersViewControllerすると、tableView を作成してメソッドを終了すると、インスタンスの割り当てが解除されます。インスタンスが割り当て解除された後 dataSource とデリゲートは無効なメモリアドレスを指します ( @property がassignand not であるためweak)

強力なインスタンス変数を作成するTableLoadGroupMembersViewController* tableDelegateと、割り当てが解除されません。

このようなもの。

// .h
@property (strong, nonatomic) TableLoadGroupMembersViewController* tableDelegate; 

// .m

UITableView* tableVIEW = [[UITableView alloc]init];
TableLoadGroupMembersViewController* tableDelegate = [[TableLoadGroupMembersViewController     alloc] init];
self.tableDelegate = tableDelegate;
[tableVIEW setDelegate:tableDelegate];
[tableVIEW setDataSource:tableDelegate];

[self.view addSubview:tableVIEW]; 
于 2013-06-14T15:13:25.660 に答える