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

Loading another view in the same viewController clears non UI properties

我有一个 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];
}

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

正如您所说,当您调用 performSegueWithIdentifier 时,将再次创建 viewController。您可以在新实例中设置值。您可以在

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

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

-(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;
         }