0

我正在尝试使用 PrepareForSegue 方法将数组从一个视图传递到另一个视图。在第一个视图中,我有一个名为“提交”的按钮,如果按下该按钮,它将读取一个 textView 并将文本存储在一个 NSArray 中,然后应该将此数组传递给另一个视图(push segue),但是当数组到达时是空的。这是代码

//.h
@property (strong, nonatomic) NSArray *words;


//.m

- (IBAction)Submit:(id)sender{
    //read textView
    _words = [self.myTextView.text componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    //if Submit is pressed go to SecondViewController
    if ([segue.identifier isEqualToString:@"secondSegue"]) {
        SecondViewController *vc = [segue destinationViewController];
        vc.array = _words;
    }
}

所以这里是接收数组的 SecondViewController 的代码

- (void)viewDidLoad
{
    [self Calculate];
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

-(void)Calculate
{
    int size = [array count];
    NSLog(@"size is %d",size);
}

日志总是说“大小为 0”。我犯了一些错误吗?是不是 Segue 在我读取 TextView 并填充数组之前就发生了,所以它总是空的?提前致谢!

编辑: 我尝试 NSLog 提交操作,我发现程序永远不会访问它,所以它永远不会读取!(ps是的,我连接了按钮)所以segue发生在提交操作之前我该如何解决?我可以在提交操作中复制 PrepareForSegue 代码吗?

4

2 回答 2

1

发送时尝试复制数组,是否也可以被释放 - (IBAction)submit.. 正在被调用?

我假设的提交按钮也具有执行 segue 的操作。我不确定执行顺序。尝试从为 segue 而不是按钮调用方法提交。这样你就可以保证它被首先调用。

于 2013-11-13T22:03:59.860 回答
0
  1. 去掉@synthesize,编译器会自动将ivar合成为_words
  2. 在分配和访问 'words' 数组时使用 self.words。如果您打算直接引用它(在大多数情况下您不会这样做),这可以确保 ivar 也得到正确设置。

您的问题是@synthesize 创建了一个名为“words”的 ivar,而不是“_words”。

于 2013-11-13T21:47:37.460 回答