iOS-无法从开关语句跳转到此案例标签?
我正在尝试在成功的应用内购买交易后将数据发布到我的数据库。也就是说,当我使用下面的代码时,XCode会抛出错误: “无法从switch语句跳转到此大小写标签” 我怎样才能解决这个问题?请参阅下面的代码 .miOS-无法从开关语句跳转到此案例标签?,ios,objective-c,Ios,Objective C,我正在尝试在成功的应用内购买交易后将数据发布到我的数据库。也就是说,当我使用下面的代码时,XCode会抛出错误: “无法从switch语句跳转到此大小写标签” 我怎样才能解决这个问题?请参阅下面的代码 .m - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions{ for(SKPaymentTransaction *transaction in transaction
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions{
for(SKPaymentTransaction *transaction in transactions){
switch(transaction.transactionState){
case SKPaymentTransactionStatePurchasing: NSLog(@"Transaction state -> Purchasing");
break;
case SKPaymentTransactionStatePurchased:
self.indicatorThree.hidden = YES;
[self.indicatorThree stopAnimating];
self.indicatorTwo.hidden = YES;
[self.indicatorTwo stopAnimating];
self.indicatorThree.hidden = YES;
[self.indicatorThree stopAnimating];
NSMutableDictionary *viewParams3 = [NSMutableDictionary new];
[viewParams3 setValue:@"current_user" forKey:@"view_name"];
[DIOSView viewGet:viewParams3 success:^(AFHTTPRequestOperation *operation, id responseObject) {
self.currentUser = [responseObject mutableCopy];
NSString *pointBalance = self.currentUser[0][@"points balance"];
NSMutableDictionary *userData = [NSMutableDictionary new];
int result = [pointBalance intValue] + [self.pointsPurchase intValue];
NSLog(@"THIS IS THE RESULT POINTS NUMBER %d", result);
NSString *resultPoints = [NSString stringWithFormat:@"%d", result];
NSDictionary *targetPoints = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects: resultPoints, nil] forKeys:[NSArray arrayWithObjects:@"value", nil]];
NSDictionary *finalPoints = [NSDictionary dictionaryWithObject:[NSArray arrayWithObject:targetPoints] forKey:@"und"];
[userData setObject:finalPoints forKey:@"field_points_balance"];
NSLog(@"FINAL POINTS TO POST %@", finalPoints);
NSDictionary *user = [[DIOSSession sharedSession] user];
NSString *uid = user[@"uid"];
[userData setObject:uid forKey:@"uid"];
[DIOSUser
userUpdate:userData
success:^(AFHTTPRequestOperation *op, id response) { /* Handle successful operation here */
NSString *userPoints = user[@"field_points_balance"][@"und"][0][@"value"];
NSLog(@"AFTER SAVE USER POINTS %@", userPoints);
[[NSNotificationCenter defaultCenter] postNotificationName:@"loginComplete" object:nil];
}
failure:^(AFHTTPRequestOperation *op, NSError *err) { /* Handle operation failire here */
NSLog(@"User data failed to update!");
}
];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Failure: %@", [error localizedDescription]);
}];
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
NSLog(@"Transaction state -> Purchased");
break;
case SKPaymentTransactionStateRestored:
NSLog(@"Transaction state -> Restored");
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
if(transaction.error.code == SKErrorPaymentCancelled){
NSLog(@"Transaction state -> Cancelled");
//the user cancelled the payment ;(
}
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
}
}
}
我以前也遇到过同样的问题,只要在你的案例中添加一个{},你所有的问题都会得到解决 块定义创建了一个新的作用域,它似乎会干扰编译器正确解释switch语句的能力 为每个案例标签添加范围分隔符可以解决此错误。我认为这是因为块的作用域现在明确地是case作用域的子级
它指的是哪个箱子标签?一个建议。你发布的代码可能很难阅读。当一个
case
语句有多行代码时,我会为该代码创建一个方法,只需调用该方法,然后调用break
。我建议将SKPaymentTransactionStatePurchased
案例的所有代码放在它自己的方法中。@Saranjith SKPaymentStateTransactionRestored andSKPaymentStateTransactionFailed@rmaddy伟大的主意谢谢:)这可能是你使用牙套的问题。开关回路在此之前闭合,因此可能出现两种情况。请检查一下
switch (transaction.transactionState) {
case 0:
{
// ...
break;
}
case 1:
{
// ...
break;
}
default:
break;
}