2

我将 ID 从 UITABLEVIEWCONTROLLER 传递到另一个 UITABLEVIEWCONTROLLER 但它引发以下错误。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITabBarController setCityId:]: unrecognized selector sent to instance 0x75225e0'

这里是 prepareForSegue 函数:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"cityPushToTab"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        featuredViewController *destViewController = segue.destinationViewController;
        destViewController.cityId = [productKeys objectAtIndex:indexPath.row];
    }

}

在我调用特色控制器的 cityId 之前,该功能做得很好。我试图记录打印正确值的productKeys,但是当我尝试将值分配给目标视图控制器对象时它正在终止。请帮忙。

4

1 回答 1

1

你确定destViewController是一流的featuredViewController吗?我确定不是。崩溃日志告诉它是一个UITabBarController.

我推荐的是创建一个继承自UITabBarController. 我会打电话MyTabBarViewController的。将情节提要中的标签栏控制器的类设置为这个新类。

MyTabBarViewController.h中,创建一个属性:

@property (nonatomic, strong) id cityId;

(请注意,cityId 可以是您需要的任何类型,例如NSString, NSNumber, ...)。

然后,更改您的prepareForSegue代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"cityPushToTab"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        MyTabBarViewController *destViewController = segue.destinationViewController;
        destViewController.cityId = [productKeys objectAtIndex:indexPath.row];
    }
}

接下来,在标签栏中的 4 个视图控制器的 .m 文件中,您可以使用以下代码访问cityId

// Cast the viewcontroller's tab bar to your class
MyTabBarViewController *tabBarController = (MyTabBarViewController*)self.tabBarController;

// Access your property
id cityId = tabBarController.cityId;
// You can test to see if it works by casting to an NSString and NSLog it
NSString *cityIdString = (NSString*) tabBarController.cityId;
NSLog (@"%@", cityIdString);
于 2012-12-26T15:02:23.460 回答