0

私はARCとストーリーボードが初めてです。からに設定IBOutletしました。しばらくすると nil に設定され、他のクラスから再ロードできなくなります。これが私のものです:UITableViewUIViewControllerIBOutletdataTable IBOutlet

@property (weak, nonatomic) IBOutlet UITableView *dataTable;

最初はdataTableではありませんnilが、別のクラスから (appDelegate 経由で) アクセスしようとするとそうではありません。この問題を解決するには?

更新 私は自分からこのメソッドを呼び出しますUIViewController

[appDelegate.myClass loginWithUserName:loginField.text andPassword:pwdField.text];

完了したら、表示するデータがあるので、次のコードをloginWithUserNameメソッドから呼び出します。

   MyViewController *controller = [[AppDelegate sharedStoryboard] instantiateViewControllerWithIdentifier:@"MyViewController"];
   [controller audioLoaded];

そして、これが myUIViewControllerのそのメソッドで、データをリロードします

 -(void) audioLoaded
 {
    //it is nil here
    [self.dataTable reloadData];
 }
4

1 に答える 1

1

オブジェクトを強力に保持するようにプロパティを設定します。

@property (strong, nonatomic) IBOutlet UITableView *dataTable;

ただし、別のView Controllerから UITableView にアクセスすることはお勧めできません..

編集:

そのロジックを appdelegate からログインを実行する専用クラスに移動することにより、アプローチ全体を再検討する必要があります。テーブルを持つ UIViewController が実装できる単純なプロトコルを作成してから、login メソッドを呼び出すときに、現在のビューコントローラーへの参照を次のように渡すことができます。

loginWithUserName:andPassword:andCaller:(id<LoginDelegate>)sender

LoginDelegate は、次の行の何かです。

@protocol LoginDelegate
- (void)audioLoaded;
@end

このようにして、あなたはただ呼び出すことができます

[sender audioLoaded];
于 2012-08-18T07:43:07.857 に答える