用委托传递数据但仍为零?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用委托传递数据但仍为零?相关的知识,希望对你有一定的参考价值。

我制作了2个viewcontrollers并在tabbar控制器上实现。我使用委托将一些数据从A vc传递给B vc。当我检查日志时它显示了正确的值。但是当我搬到B vc时,我通过的值是零。 (该值适用于tableview。)这是我的代码。

    in A vc

    -(void)passData {

        NSMutableDictionary *infoDic = [[NSMutableDictionary alloc] init];
        [infoDic setObject:url forKey:@"file_url"];
        [downloadArr addObject:fileInfoDic];

        [Bvc getDataFromA:downloadArr];
        [Bvc reloadTableView];        
    }

    in B vc

  -(void)getDataFromA:(NSMutableArray *) downloadArr{
        self.downloadArr = [downloadArr mutableCopy];
        NSLog(@"my download list%@", self.downloadArr); // This time was ok.
}
    - (void)viewWillAppear:(BOOL)animated{
        [super viewWillAppear:animated];

        NSLog(@"Array status %@", self.downloadArr);//This time it showed me nil
        [self.tableView reloadData];
    }
答案

将数组打印在viewWillAppear内部而不是零

NSLog(@"Array status %@", self.downloadArr);//This time it showed me nil

你需要在从aVC展示bVC之前给它一个值,无论你使用present / segue / push,也不要忘记将它声明为strong,你需要这样做

bvc = [[self.tabBarController viewControllers] objectAtIndex:1]; 
[bvc loadViewIfNeeded];
[bvc getDataFromA:downloadArr];
另一答案

请检查您移动到B-VC的方式以及您在A -VC中使用的(B-VC)实例是否与B-VC“viewWillAppear”方法中的self相同。当你转移到B-VC时,似乎已经创建了一个新实例。

或者您可以实现'setDownloadArr'方法,记录值并显示值何时变为零。

以上是关于用委托传递数据但仍为零?的主要内容,如果未能解决你的问题,请参考以下文章

将单元格从委托传递到 UITableViewController 时 indexPath 为零

尽管苹果放弃了对 iPhone 4S 的支持,但仍为 iOS 提交添加了 3.5 英寸的屏幕截图

Dagger 2:在片段中调用onAttach之前,注入的对象可能仍为null

如何解决仍然为零的委托

iOS 7 UITableView indexpath 行属性为零

自定义委托始终为零