【问题标题】:Passing a MutableArray between ViewControllers在视图控制器之间传递可变数组
【发布时间】:2012-11-12 11:50:20
【问题描述】:
  BookingDocumentsViewController *bdVc = [self.storyboard instantiateViewControllerWithIdentifier:@"BookingDocs"];
    bdVc.orId = rl_id;
    bdVc.docsArray =  self.documentsArray;
    [self.navigationController pushViewController:bdVc animated:YES];

我有上面的代码sn-p。我正在尝试加载一个新的视图控制器并将其可变数组(docsArray)对象分配给当前视图的可变数组(documentsArray

每当我执行上述代码时,我都会收到 EXC_BAD_ACCESS 错误。

但如果我评论第 3 行。它可以工作,但我无法让我的数组进入新视图。我什至尝试过[[NSMutableArray alloc] initWithArray:self.documentsArray]; 这也不起作用。

但是如果我使用bdVc.docsArray =[[[NSMutableArray alloc] init]; 它可以工作,但我又无法将我的可变数组放到新视图中。

编辑: 但是第二行有 NSString 值。他们可以毫无问题地通过。

我在这里做错了什么?

我在控制台中没有收到任何错误,而是得到了这个。

【问题讨论】:

  • 发布崩溃的堆栈跟踪。
  • 您是在使用 bdVc 的 viewDidLoad 或 viewWillAppear/viewDidAppear 中的 docsArray 吗? docsArray 是一个强属性吗?
  • 是的 docsArray 是一个强大的属性。而且我没有在其他任何地方对 docsArray 做任何事情。
  • 正如你已经被问到的那样 - 请跟踪堆栈。
  • 控制台没有错误,应用程序崩溃。我更新了问题。

标签: ios objective-c nsmutablearray


【解决方案1】:

也许考虑使用 Segue。它为您实例化目标视图控制器。然后在你的源视图控制器中实现

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

获取对目标视图控制器的引用并设置其数据。

BookingDocumentsViewController *bdVc = [segue destinationViewController];
bdVc.docsArray = self.documentsArray;

【讨论】:

    【解决方案2】:

    在 BookingDocumentsViewController.h 中

    @property(nonatomic, retain)NSmutableArray *docsArray;
    

    你可以在你的 BookingDocumentsViewController.m 中做:

    @synthesize docsArray;
    
    - (void)viewDidLoad
     {
        NSmutableArray *array = [NSmutableArray alloc]initWithArray:docsArray];   
       [super viewDidLoad];
     }
    

    那么当你推送视图时

    BookingDocumentsViewController *bdVc = [self.storyboard instantiateViewControllerWithIdentifier:@"BookingDocs"];
    bdVc.orId = rl_id;
    bdVc.docsArray =  self.documentsArray;
    [self.navigationController pushViewController:bdVc animated:YES];
    [bdVc Release];
    

    【讨论】:

    • 在 viewDidLoad 中创建一个不在任何地方使用的本地数组有什么意义?这远不是一个答案
    • 好吧,如果你想在其他块中使用它,你可以在 .h 中定义该数组,我只是专注于传递数组值funda ...无论如何将来都会处理。跨度>
    【解决方案3】:

    我想我找到了问题所在。一个非常基本的错误。在 bdVc 的 viewDidLoad 我有以下行,

    NSLog(@"Booking Documents viewDidLoad : %@",self.docsArray.count);

    这是导致错误的原因。 %@ 而不是 %d。我想知道为什么 xcode 没有显示正确的错误原因。

    感谢大家的帮助。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 2012-07-19
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      相关资源
      最近更新 更多