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

问题描述 投票:0回答:2

我制作了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];
    }
ios objective-c delegates
2个回答
2
投票

将数组打印在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];

0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.