0

我有一个有趣的问题。我有 3 个视图控制器(让我们将它们命名为 tableViewControler A、viewControler B、最终 tableViewController C)。它们都涉及过滤数据。

在 AI 中选择一个主要类别,在下一步中,我将所选类别的名称发送到 B(在 didSelectRowAtIndexPath 中像这样

FilterTableViewController *fViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"filterTableView"]; //B view controller
fViewController.passedValue = [categories objectAtIndex:indexPath.row];

) 控制器 B 的目的是对数据进行额外过滤(例如是否有剩余时间,哪个项目的价格最高等)。B 提到了passedValue(带有类别名称的字符串)。用户选择过滤器并单击按钮后,C 将被推送。

现在,在 C 中,我有公共 NSString“selectedCat”。在执行对 C 的 segue 之前,该字符串应在 B 中分配数据

FilterResultViewController *resViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"resController"]; //C viewController
resViewController.selectedCat = passedValue;

现在,在 C 中,我正在请求数据。这是 http 请求,我正在返回 JSON。这一切都很好。然而,我的问题是,selectedCat 是(NULL)。我制作了 NSLogs 来查看我的数据在哪里丢失了。我发现的更令人困惑。

这是我的控制台日志

2012-11-30 12:27:07.976 portal_postupne[4510:11303] selected sports //This NSLog is in A
2012-11-30 12:27:10.542 portal_postupne[4510:11303] category = (null)// This NSLog is in C
2012-11-30 12:27:10.653 portal_postupne[4510:11303] passed category: sports//This NSLog is in B and gets called on button click that pushes C

所以基本上我的 C 视图控制器在 B 之前以某种方式被调用。我想这就是我的类别为空的原因。我还尝试在 A 中实例化 C 并在 A 中设置类别值。再次为 Null。

接下来,我在 viewWillAppear 方法中做我的表格视图。但是我稍后将其移至 viewDidLoad ,但这并没有解决我的问题。

请帮忙 :)

4

1 回答 1

0

我通过这种方式“解决”了它,可能是错误的方法。我在 NSUserDefaults 中保存了类别值。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [[NSUserDefaults standardUserDefaults] setObject:[categories objectAtIndex:indexPath.row] forKey:@"kategoria"];
    [defaults synchronize];

当我为 HTTP 请求设置参数时,然后在 C 中调用它。

NSMutableString *parameters = [[NSMutableString alloc]init];
    [ms appendFormat:@"&category=%@",[defaults objectForKey:@"kategoria"]];

但是我不认为,这是“正确”的方法。

于 2012-11-30T12:51:43.407 回答