2

我刚刚更新了一个支持 iPhone 5 和 iOS6 的应用程序,我发现了一个奇怪的错误。

在 iOS5 中,此代码运行良好,但在每个 iOS6 设备上,当按下按钮并且调试器将 buttonTitleAtIndex:buttonIndex 视为未知方法时,什么都没有发生。我使用实际的 buttonIndex 数字而不是字符串进行了解决,但我很困惑为什么会发生这种情况,因为我不知道为什么 iOS6 应该改变对此的支持。

if([actionSheet buttonTitleAtIndex:buttonIndex] == @"Email to a friend") {
        NSLog(@"Email");
        [self displayComposerSheet];
    }

    else if ([actionSheet buttonTitleAtIndex:buttonIndex] == @"Add to Favorites")                   {
        NSLog(@"favorites");
        [self addFavorite];
    }
    else if ([actionSheet buttonTitleAtIndex:buttonIndex] == @"Post to Facebook") {
        NSLog(@"Facebook");
        [self shareOnFacebook];
    }
    else if ([actionSheet buttonTitleAtIndex:buttonIndex] == @"Tweet this") {
        NSLog(@"tweet");
        [self tweet];
    }
4

3 回答 3

2

以下为我打印正确的标题:

NSLog(@"TITLE: %@", [actionSheet buttonTitleAtIndex: buttonIndex]);

为了比较,请执行以下操作:

[[actionSheet buttonTitleAtIndex: buttonIndex] isEqualToString: @"Email to a friend"]
于 2013-01-29T23:07:55.703 回答
2

您不能按地址比较 Objective-C 对象。==不会按您希望的方式工作。它在 iOS 5 上为您工作只是一个怪癖,并且可以通过简单的重新编译来改变。

您必须用于-isEqual:比较两个对象:

if ([[actionSheet buttonTitleAtIndex:buttonIndex] isEqual:@"Email to a friend"]) {
    ...
}

更好的方法是将按钮索引与已知列表进行比较(enum例如,如果您稍后重命名按钮,这将使本地化更容易并防止错误。

于 2013-01-29T23:07:14.650 回答
0

这可能是因为您没有使用 isEqualToString。"==" 并不是真正进行字符串比较,它只是比较内存中的同一点,这可能是它在 iOS 6 中失败的原因。

于 2013-01-29T23:07:46.000 回答