用委托传递数据,但为什么仍然没有?

时间:2018-09-15 15:37:15

标签: ios objective-c delegates

我制作了2个ViewController,并在Tabbar Controller上实现。我使用委托将一些数据从A vc传递到B vc。当我检查日志时,它显示了正确的值。但是当我使用B vc时,我传递的值为nil。 (该值用于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];
    }

2 个答案:

答案 0 :(得分:2)

要在viewWillAppear内将数组打印为nil

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];

答案 1 :(得分:0)

请检查您移至B-VC的方式以及您在A -VC中使用的(B-VC)实例是否与B-VC“ viewWillAppear”方法中的实例相同。 看来当您移至B-VC时,已创建一个新实例。

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