我在从objective-c中的一个viewController传递数据时得到null

时间:2016-02-27 10:23:44

标签: ios objective-c

当从一个视图控制器单击一个按钮时,我尝试设置第二个视图控制器的NSString属性

CommentsViewController *commentViewController =  [[CommentsViewController alloc] init];

STPopupController *commentPopupController = [[STPopupController alloc] initWithRootViewController:commentViewController];
commentPopupController.containerView.layer.cornerRadius = 4;

commentViewController.streamID = trackID;
commentViewController.radioID = radioID;


[commentPopupController presentInViewController:self];

但是当视图控制器显示为弹出窗口时,这些字符串值为空。我错了什么?

@property (strong, nonatomic) NSString *streamID;
@property (strong, nonatomic) NSString *radioID;

视图控制器是启动两次还是什么,我无法找到问题所在。 这是注释视图控制器的初始化方法

- (instancetype)init {
if (self == [super init]) {
    self.title = @"Comments";
    self.navigationController.navigationBar.tintColor = [UIColor blueColor];
    self.contentSizeInPopup = CGSizeMake(self.view.frame.size.width - 50 , self.view.frame.size.height - 150);
    // self.landscapeContentSizeInPopup = CGSizeMake(400, 200);
}
return self;

}

5 个答案:

答案 0 :(得分:0)

最好的办法是检查调试器。也许您传递的值为空?

将断点放在您认为问题所在的位置。

答案 1 :(得分:0)

如果必须将值传递给导航堆栈中不存在的视图控制器,那么如果要推送故事板上的视图控制器,则必须创建视图控制器实例

STPopupController *objViewController = [Self.storyboard instantiateViewControllerWithIdentifier: @"identifier"];

并传递

之类的值
 objViewController.streamID = trackID;
 objViewController.radioID = radioID;

如果您使用的是xib,请使用以下

SecondViewController *tempView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]

如果我的代码中有任何错误,请更正我,因为我正在通过手机发帖回复。

答案 2 :(得分:0)

如果您在streamID中访问radioIDCommentsViewController,并且没有任何迹象,则很难说明为什么他们没有。

可能是STPopupController正在其init方法中访问CommentsViewController上的view属性。在您将任何值实际分配给属性之前,这将导致调用viewDidLoad方法。

在这种情况下最简单的修复方法是在创建弹出控制器之前分配值。

// I would recommend using initWithNibName:nil bundle:nil here, even if
// you create the view in code.
CommentsViewController *commentViewController = [[CommentsViewController alloc] init];

// assign before creating STPopupController
commentViewController.streamID = trackID;
commentViewController.radioID = radioID;

STPopupController *commentPopupController = [[STPopupController alloc] initWithRootViewController:commentViewController];

答案 3 :(得分:0)

可能是由于初始化失败导致的:

- (instancetype)init {
if (self == [super init]) {

请注意==

应该是:

- (instancetype)init {
if (self = [super init]) {

作业,而不是平等。

答案 4 :(得分:0)

初始化目标控制器:

CommentsViewController *commentViewController =  [[CommentsViewController alloc] init];

然后传递数据:

commentViewController.streamID = trackID;
commentViewController.radioID = radioID;

最后,通过以下方式推送STPopupController:

[self.popupController pushViewController:commentViewController animated:YES];

注意: popupControllerSTPopupController附带#import <STPopup/STPopup.h>的属性