我认为,通过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/