繁体   English   中英

iOS-错误:无法识别的选择器已发送到PrepareForSegue中的实例:

[英]iOS - Error : unrecognized selector sent to instance in PrepareForSegue:

我想在控制器之间传递数据,但出现此错误,并且在这里被阻止:

错误:

 [UITabBarController setUID:]: unrecognized selector sent to instance

代码:

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSString *test = (NSString *)sender;  
if ([segue.identifier isEqualToString:@"segueno"]) {
    FirstViewController *VC = (FirstViewController *)[segue destinationViewController];
    VC.uID = test;
    NSLog(@"%@",VC.uID);
}}

这是故事板

在此处输入图片说明

在运行时检查VC的实际类型是什么。 看起来您投错了类型。

要在运行时检查实型,请在VC.uID = test;上设置断点VC.uID = test; 在调试窗口中,您应具有以下内容:

VC = (RealClass *) 0x312321312

真正的课堂不是您所期望的。

最可能的原因是VCUITabBarController 所以你必须更换

FirstViewController *VC = (FirstViewController *)[segue destinationViewController];

UITabBarController *tabBarController = (UITabBarController *)[segue destinationViewController];
// replace 1 with real index of your FirstVC
FirstViewController *VC = [[tabBarController viewControllers] objectAtIndex:1];

搜索目的地是UITabBarController。 因此您需要检查viewcontrollers列表。 然后基于此,您可以查找uID。

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        NSString *test = (NSString *)sender;

        if ([segue.identifier isEqualToString:@"segueno"]) {

            FirstViewController *firstVC ;

            UITabBarController *destinat = [segue destinationViewController];

            if ([destinat isKindOfClass:[UITabBarController class]]) {


                for (id listOfViewControllers in [destinat viewControllers]) {

                    if ([listOfViewControllers isKindOfClass:[FirstViewController class]]) {

                        firstVC = listOfViewControllers;

                        break;
                    }

                }

            }

            firstVC.uID = test;
            NSLog(@"%@",firstVC.uID);
        }}

这是我在segue之间传递managedObjectContext的方法

在您将传递数据的类中,使用prepareForSegue调用。 (假设该类具有一个名为_managedObjectContext的变量,可以将其传递给segue类)

上课的来源:

.h文件:

@property (weak, nonatomic) NSManagedObjectContext *managedObjectContext;

.m文件:

@synthesize managedObjectContext

调用@synthesize将进行以下操作:

  • 名为_managedObjectContext的局部变量
  • getManagedObjectContext的方法
  • setManagedObjectContext的方法

此外,将以下方法添加到您的课程中

// Pass on managedObjectContext
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

// If the destination VC is able to take the setManagedObjectContext method the current objectContext will be passed along.
if ([segue.destinationViewController respondsToSelector:@selector(setManagedObjectContext:)]) {
    [segue.destinationViewController performSelector:@selector(setManagedObjectContext:)
                                          withObject:_managedObjectContext];
} else {

    NSLog(@"Segue to controller [%@] that does not support passing managedObjectContext", [segue destinationViewController]);
 }
}

然后在我的“类”中接收我所做的数据:在.h文件中

@property (weak, nonatomic) NSManagedObjectContext *managedObjectContext;

在.m文件中,我有:

@synthesize managedObjectContext;

这样做(具有合成功能)是调用setManagedObjectContext和getManagedObjectContext。 在即将开始搜索时,我检查以确保destinationController将“响应”此方法,如果这样,则设置数据。

明确?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM