【问题标题】:NSMutableArray is nil when trying to use prepareForSegue尝试使用 prepareForSegue 时 NSMutableArray 为零
【发布时间】:2014-04-18 16:59:13
【问题描述】:

我是一名新开发人员,这个问题让我摸不着头脑。

无论出于何种原因,当我试图将它传递给我的 DetailViewController 时,我的拳击可变数组仍然为零。 punches 是我的 Punches 类 NSMutableArray 类型中的一个属性。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
DetailViewController* dvc = [segue destinationViewController];
NSIndexPath* indexPath = [shiftTableView indexPathForSelectedRow];
dvc.shiftPunches.punches = shifts[indexPath.row];
}

我已将 shiftPunches 设置为我的 DetailViewController 中的一个属性,并具有强引用。使用调试器,我的 shifts 可变数组显示它有 2 个对象(都是可变数组)。

我什至尝试过:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
DetailViewController* dvc = [segue destinationViewController];
dvc.punches.punches = [NSMutableArray new];
[dvc.shiftPunches.punches addObject:@"foo"];
}

仍然是零。我确定我在这里遗漏了一些基本的东西,有什么建议吗?

谢谢

【问题讨论】:

  • 分配了什么shiftPunches
  • 使用[NSMutableArray array];
  • 我的猜测是shiftPunches 尚未初始化,正如@Larme 所提到的,因此您正在向nil 发送setPunches 消息。请发布您的 DetailsViewController 代码,以便我们查看您在何时何地初始化 shiftPunches
  • @davidf2281- 你们是对的,我没有初始化 shiftPunches。但是我很困惑为什么我要在我的 DetailViewController 中进行初始化,因为在它甚至有机会完成 segue 之前我就得到了“nil”。这应该在我的 ViewController 中初始化吗?

标签: ios objective-c arrays


【解决方案1】:

如果pucnes 是不为零的有效 NSMutableArray,请尝试执行以下操作:

当您这样做时 - [NSMutableArray new]; 您只需创建一个空数组。尝试执行以下操作:

1) 在 DetailViewController 中创建 NSMutableArray。将其命名为 detailArray(或您喜欢的名称)。

2) 然后做:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
 DetailViewController *dvc = [[DetailViewController alloc]init];
dvc.detailArray = self.punches;


}

【讨论】:

  • 这是完全错误的。当prepareForSegue 被调用时,传入的segue 将有一个目标视图控制器的实例化实例可供使用。分配初始化一个新实例,然后立即将其指针分配给destinationViewController 将简单地丢弃您刚刚创建的实例。
  • 我编辑了我的评论,如果您发现错误,请编辑它。对于我的应用程序,我总是这样做以在控制器之间传递值。
  • 还是错了。您已经创建了一个对象的本地实例,dvc。一旦这个对象超出范围——即在方法结束时——它就会被丢弃,其他任何东西都不能引用它。您的代码什么都不做,除非self.punches 很强大,否则可能会造成内存泄漏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2017-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多