0

あるビューコントローラー(MainViewController)がデリゲートを介して別のビューコントローラー(JoinedViewController)と話すストーリーボードを使用した簡単なセットアップがあります。prepareForSegueまではすべて問題ありません。そこで、受信側のビューコントローラのroomDataとラベルのテキストを宣言していますが、どちらも受信されていません。

MainViewController.m

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"JoinRoom"]) {
        UINavigationController *navigationController = segue.destinationViewController;
        JoinedViewController *joinedViewController = [[navigationController viewControllers]objectAtIndex:0];
        joinedViewController.label.text = self.roomName;
        joinedViewController.roomData = self.roomData;
        joinedViewController.delegate = self;
    }
}

MainViewController.hの削除:

@interface MainViewController : UIViewController <JoinedViewControllerDelegate, UITextFieldDelegate>

@property (weak, nonatomic) IBOutlet UITextField *textField;
@property (nonatomic, copy) NSString *roomName;
@property (nonatomic, weak) S3ListObjectsResult *roomData;

JoinedViewController.h宣言:

@interface JoinedViewController : UITableViewController 

@property (nonatomic, weak) id <JoinedViewControllerDelegate> delegate;
@property (nonatomic, weak) S3ListObjectsResult *roomData;
@property (weak, nonatomic) IBOutlet UILabel *label;
4

1 に答える 1

1

私はあなたが2つの異なる問題を抱えていると思います。roomDataは、(両方のクラスで)弱いものではなく、強いものとして宣言する必要があります。roomNameの問題は、文字列自体ではなく、JoinedViewControllerのviewDidLoadが呼び出される前にラベルに設定しようとしているという事実です。ビューがロードされるまで、別のコントローラーのUI要素にアクセスすることはできません。代わりに文字列roomDataを渡し、JoinedViewControllerのviewDidAppearメソッドのラベルに設定する必要があります。

于 2013-02-02T06:13:46.577 に答える