我认为,通过prepareSeque方法应该将textView中编写的内容传递给下一个视图。
在我使用seque方法中的textField和textfield.text之前,它工作正常。但是我无法使其与textView一起使用。

我在.h文件中有一个NSString属性:@property(弱,非原子)NSString * textString;
我将其合成为.m文件:@synthesize textString = _textString;

在我的textViewDidEndEditing中,我可以看到(通过调试)文本视图中的文本被拾取并且textString被设置。


(void)textViewDidEndEditing:(UITextView *)textView {
NSString * theText = textView.text;
self.textString = theText;
}


但是,当我随后想要在我的Seque方法中检索textString时,它不包含任何文本:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([segue.identifier isEqualToString:@"go"]) {

    ISecondViewController *vc = [segue destinationViewController];

    vc.funnyString = self.textString;
}


如果我输入:self.textString = @“ Hi Hi”;在Seque方法中,funnyString将与Hi Hi一起传递,以便使该部分正常工作。

在这种情况下,我是否完全误解了NSString的“获取并设置”?

最佳答案

这里的问题是您一直在为weak使用textString属性,因此当属性的范围超出nil方法时,它将为textViewDidEndEditing

为什么?因为弱引用的原理是一旦引用的对象不存在,它将立即设置为nil。在方法的末尾将不存在“ theText”对象的情况将如此。请使用strong属性。

关于ios - 来自TextView的NSString属性消失,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14077680/

10-10 01:27