PrepareForSegue之谜

2024-05-20

我在两个不同的 VC 中有一个prepareForSegue 方法。一个使用一个if声明,而另一个旨在使用switch。除了名称之外,代码几乎相同。

这个效果很好:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
        NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
    if ([[segue identifier] isEqualToString:@"addActivity"])
    {
        UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
        AddActivityViewController *aavc = (AddActivityViewController *)navController.topViewController;
        aavc.delegate = self;
        ListActivity *addedActivity = (ListActivity *)[ListActivity MR_createInContext:localContext];
        aavc.thisActivity = addedActivity;
    }

这给了我两个警告。在第一行,我收到“预期表达式”警告。在第二行,我得到“使用未声明的标识符‘NavController’。

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
    [SearchSpecs MR_truncateAllInContext:localContext];
    [localContext MR_saveToPersistentStoreAndWait];

    switch ([sender tag])
    {
        case aVsAButton_tag:
            UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
            AvsAViewController *aVSaVC = (AvsAViewController *)navController.topViewController;
            aVSaVC.delegate = self;
            SearchSpecs *thisSpec = (SearchSpecs *)[SearchSpecs MR_createInContext:localContext];
            aVSaVC.currentSpec = thisSpec;

            break;

        default:
            break;
    }

}

有人可以指出我的错误吗?

Thanks!

Edit:

通过所有给出的答案解决了问题,非常感谢大家!

这是我的新代码:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
    [SearchSpecs MR_truncateAllInContext:localContext];
    [localContext MR_saveToPersistentStoreAndWait];

    switch ([sender tag])
    {
        case aVsAButton_tag:
        {
            UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
            AvsAViewController *aVSaVC = (AvsAViewController *)navController.topViewController;
            aVSaVC.delegate = self;
            SearchSpecs *thisSpec = (SearchSpecs *)[SearchSpecs MR_createInContext:localContext];
            aVSaVC.currentSpec = thisSpec;
        }
            break;

        default:
            break;
    }

}

当我根据第三个答案的建议添加分号时,我在default:线。然而,当我附上case将代码放在大括号中,所有问题都消失了。非常好的事情让我记住了!

我会绿色检查所有答案,但由于它们几乎同时到达,我希望如果我接受最上面的一个,不会冒犯任何人。所有人+1,再次感谢!


在 C/Objective-C 中,您不能像这样在 switch 语句中声明变量。如果要声明在 switch 语句的特定情况下使用的变量,可以将该情况的所有代码放在语句块中:

switch ([sender tag])
{
    case aVsAButton_tag:
    {
        UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
        AvsAViewController *aVSaVC = (AvsAViewController *)navController.topViewController;
        aVSaVC.delegate = self;
        SearchSpecs *thisSpec = (SearchSpecs *)[SearchSpecs MR_createInContext:localContext];
        aVSaVC.currentSpec = thisSpec;
    }
        break;

    default:
        break;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PrepareForSegue之谜 的相关文章

随机推荐