我在兩個不同的VC中有一個prepareForSegue方法。一個使用if
聲明,而另一個使用switch
。代碼幾乎完全相同,除了名稱。PrepareForSegue mystery
這一個正常工作:
- (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;
}
}
可有人請指出我的錯誤
感謝
編輯:?!
的問題被所有給出的答案固定,並且非常感謝所有!
這裏是我的新代碼:
-(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,並再次感謝!
如果你在switch case中創建對象,你必須使用:'{}' – Larme