在同一viewController中加载另一个视图会清除非UI属性

时间:2015-01-21 06:12:35

标签: ios objective-c iphone xcode uiviewcontroller

我有一个UIViewController控制Xcode中的几个不同的视图。我想使用当前视图中的信息在传入视图上设置标签。我知道在加载视图时会重置标签和其他UI元素,但我的非UI @property也被设置为nil。

这是我的财产:

@property (strong, nonatomic) NSString* username;   

以下是设置它的代码:

//NSLog(@"%@",dict);
if ([dict[@"login"] intValue]){
    [self performSegueWithIdentifier:@"JoinSuccess" sender:sender];
    self.username = dict[@"user"];

以下是尝试使用它的代码:

- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"%@", self.username);
self.welcomeLabel.text = [NSString stringWithFormat:@"Welcome, %@",self.username];
}

我已尝试在username之前和之后设置performSegueWithIdentifier,但在任何一种情况下,当我尝试在viewDidLoad中引用它时,值为nil。知道为什么它会重置@property吗?我的猜测可能是它创建了一个我的viewController的新实例。如果是这样的话,我该如何传递所需的变量呢?

2 个答案:

答案 0 :(得分:0)

正如您所说,只要您调用performSegueWithIdentifier,就会再次创建viewController。您可以在新实例中设置值。您可以在

中执行此操作
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
   YourViewController *vc = [segue destinationViewController];
   vc.username = dict[@"user"];
}

答案 1 :(得分:0)

您必须添加另一种方法将值从一个视图控制器传递到另一个视图控制器。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{
   nextViewcontroller *nextViewcontrollerObjt = [segue
destinationViewController]; 
// apply setter to set value of next view
    nextViewcontrollerobject.title = nextViewControllerTitleString;
    nextViewcontrollerobject.variable_1= currentView_variable1; 
    nextViewcontrollerobject.variable_2 =currentView_variable2;
         }