传递NSArray使数组为空

时间:2013-11-13 21:46:28

标签: ios objective-c arrays segue

我试图使用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提交动作,我发现程序永远不会访问它,所以它永远不会读取! (p.s.是的我连接了按钮) 所以segue在Submit动作之前发生 我怎么解决?我可以在提交操作中复制PrepareForSegue代码吗?

2 个答案:

答案 0 :(得分:1)

尝试在发送时复制数组,可以获得释放也确定 - (IBAction)submit ..正在调用吗?

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

答案 1 :(得分:0)

  1. 删除@synthesize,编译器会自动合成 ivar是_words
  2. 在分配和访问“words”数组时使用self.words。这样可以确保ivar也能正确设置,如果你打算直接引用它(在大多数情况下你不会这样做)。
  3. 你的问题是@synthesize会创建一个名为'words'的ivar,而不是'_words'。