当前位置 : 主页 > 手机开发 > ios >

ios – 为什么我不能使用prepareForSegue传递值?

来源:互联网 收集:自由互联 发布时间:2021-06-11
我有两个UIViewControllers.在ViewController中我有代码: - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{if ([segue.identifier isEqualToString:@"ToResetPwd_NumberSegue"]){ ResetPwdBySmsCodeViewController* vc =
我有两个UIViewControllers.在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中很好用

您应该将B ViewController中的2个属性声明为强大或更好的副本:

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

您可以获得_test的原因是您为其分配了一个文字字符串值,该值由编译器在特定内存区域中分配.因此它永远不会被释放,弱变量将无限期地指向它(直到你明确地为_test分配一个新值,即.)

另一方面,当你访问weak属性时,你可以从另一个可能不存在的对象中为vc.phone_no分配一个属性(因为当它指向的对象被解除分配时,弱属性是nil-ed.)因此需要强大的或复制.

网友评论