0

我有一个使用故事板的简单设置,其中一个视图控制器(MainViewController)通过委托与另一个(JoinedViewController)对话。在 prepareForSegue 之前一切都很好。在那里,我为接收视图控制器声明了 roomData 和标签的文本,但都没有收到。

主视图控制器.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

我认为你有两个不同的问题。roomData 应该声明为强,而不是弱(在两个类中)。roomName 的问题不在于字符串本身,而在于您试图在 JoinedViewController 的 viewDidLoad 被调用之前将其设置在标签上。在加载其视图之前,您无法访问另一个控制器的 UI 元素。您应该传递字符串 roomData,并将其设置在 JoinedViewController 的 viewDidAppear 方法中的标签上。

于 2013-02-02T06:13:46.577 回答