Предупреждение: длинный формат определяет тип', но аргумент имеет тип 'UIWebViewNavigationType' (ака 'перечисление UIWebViewNavigationType')


Было интересно, может ли кто-то помочь мне с этим предупреждением об ошибке, которое я получаю в Xcode. Я думаю, что это как-то связано с 32 v 64bit. Я хотел бы, чтобы код работал как в 32, так и в 64 битах. Соответствующий раздел кодекса гласит:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSLog(@"expected:%ld, got:%ld", (long)UIWebViewNavigationTypeLinkClicked, navigationType);
    NSLog(@"Main Doc URL:%@", [[request mainDocumentURL] absoluteString]);
    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        [[UIApplication sharedApplication] openURL:[request mainDocumentURL]];
        return NO;

Большое спасибо

1 4

1 ответ:

UIWebViewNavigationType определяется как

typedef NS_ENUM(NSInteger, UIWebViewNavigationType) {
    // ...
};

И NSInteger-это int на 32-битных и long на 64-битных платформах. Поэтому вы следует привести значение к long

NSLog(@"expected:%ld, got:%ld", (long)UIWebViewNavigationTypeLinkClicked,
                                (long)navigationType);

Чтобы он компилировался без предупреждений (и работал корректно) во всех случаях.