[ios]我为什么不能通过使用 prepareForSegue 的价值?

标签: ios Objective-C
发布时间: 2017/3/21 23:31:58
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有两个 UIViewControllers 。A ViewController 我有代码︰

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"ToResetPwd_NumberSegue"])
{
    ResetPwdBySmsCodeViewController* vc = (ResetPwdBySmsCodeViewController*)[segue destinationViewController];
    vc.phone_no = _TF_phoneOrEmail.text;//TF_phoneOrEmail is a UITextField
    vc.test = @"dagaga";
}

}

我在 B.h 代码

@interface ResetPwdBySmsCodeViewController : UIViewController<UITextFieldDelegate>
@property (weak, nonatomic) NSString *phone_no;
@property (weak, nonatomic) NSString *test;
@end

在 B.m

我可以得到的值 _test ,但不是_phone_no

我敢肯定, vc.phone 是很好的prepareForSegue

解决方法 1:

您应声明中作为 B ViewController 的 2 属性 strong 或更好的为 copy :

@interface ResetPwdBySmsCodeViewController : UIViewController<UITextFieldDelegate>
@property (strong, nonatomic) NSString *phone_no;
@property (strong, nonatomic) NSString *test;
@end

你可以得到的原因 _test 是您要分配它由编译器在一个特定的内存区域中分配的文本字符串值。它因此从未释放和 weak 变量将无限期地指向它 (直到您显式地将新值赋给 _test ,这就是。)

另一方面,你分配 vc.phone_no 从可能不存在再当您访问的另一个对象的属性 weak 属性 (因为 weak 当它指向的对象被释放时,属性是零 ed。)因此需要 strongcopy

官方微信
官方QQ群
31647020