gpt4 book ai didi

ios - 使用委托(delegate)将数据传回 VC 时属性为 nil

转载 作者:行者123 更新时间:2023-11-29 03:18:35 25 4
gpt4 key购买 nike

我在 xib 文件中有一个 View ,我将其加载到我的 viewController - 它是一个临时 View ,因此不会一直显示在屏幕上。但是,临时 View 和主视图使用相同的 View Controller 类,因为它们都在做相同的工作。

现在,在 xib View 中,我加载了第二个 viewControoler - 我们称它为 viewControllerB - 这是一个包含 197 个单元格的 UITableView。一旦选择了一个单元格, View 就会消失,单元格的值将返回给 viewControllerA。

viewControllerB 在 Storyboard上。

这是我使用的代码:

viewControllerB(我需要从中取回数据的 VC)

委托(delegate)协议(protocol):

@protocol CountrySelectedDelegate <NSObject>

-(void)selectedCountry: (id)countryReturned;

@end

@property (strong, nonatomic) id <CountrySelectedDelegate> myDelegate;

然后在.m文件中:

设置委托(delegate):

ViewControllerA *viewA = [[ViewControllerA alloc]init];
self.myDelegate = viewA;

然后我在同一个文件中调用委托(delegate);

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

[[self myDelegate] selectedCountry:indexPath.row];


[self dismissViewControllerAnimated:YES completion:nil];

}

现在在 viewControllerA 中:

pragma mark - CountrySelected 委托(delegate)

-(void)selectedCountry:(id)countryReturned
{
self.testInt = countryReturned;


}

现在这个方法确实被委托(delegate)调用了。查看控制台:countryReturned 是正确的值。此方法完成后,self.testInt 也是正确的值。

然后,在我的 viewWillAppear 方法中,我只需再次检查该值,看看它是否仍然与 NSLog 打印相同。

viewWillAppear 方法中的值始终为 nil(或我检查它的任何其他地方)——我尝试过使用 NSMutableString 和 NSString——始终为 nil。

为什么我的属性/实例变量被设置为零?

更新:

这就是我显示 viewControllerB 的方式

- (IBAction)countrySelect:(UIButton *)sender
{
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
UITableViewController *vc = [sb instantiateViewControllerWithIdentifier:@"CountrySelection"];
vc.modalTransitionStyle = UINavigationControllerOperationPop;
[self presentViewController:vc animated:YES completion:NULL];
}

最佳答案

ViewB 上执行下面的操作,我猜你已经完成了

@protocol CountrySelectedDelegate <NSObject>

-(void)selectedCountry: (NSInteger)countryReturned;

@end

@property (week, nonatomic) id <CountrySelectedDelegate> myDelegate;

并且在 didSelectRowAtIndexPath

if ([[self myDelegate] respondsToSelector:@selector(selectedCountry:)]) 
{
[[self myDelegate] selectedCountry:indexPath.row];
}

ViewA

  1. 遵守协议(protocol)

    @interface ViewA : UIViewController < CountrySelectedDelegate >
  2. 创建调用ViewB

    ViewB *viewBObjc=[[ViewB alloc] init];
    [viewBObjc setMyDelegate:self];
    [[self navigationController] presentViewController:ViewB animated:YES completion:Nil];
  3. ViewA 上实现委托(delegate)

    -(void)selectedCountry: (NSInteger)countryReturned
    {
    NSLog(@"Country Id is :%d", countryReturned);
    }

关于ios - 使用委托(delegate)将数据传回 VC 时属性为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21397696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com