4

我在我的应用程序中使用 Google Drive SDK。

自 2014 年 6 月左右以来,它一直运行良好。

更新到 Xcode 6.3 后,我的目标都没有构建。

实现文件GTMOAuth2ViewControllerTouch.m包含编译器抱怨的两个块:

if (accessibility == NULL
    && &kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly != NULL) {
        accessibility = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly;
}

特别是消息:“kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly不等于空指针的地址比较总是正确的”。

if (accessibility != NULL && &kSecAttrAccessible != NULL) {
    [keychainQuery setObject:(id)accessibility
                      forKey:(id)kSecAttrAccessible];
}

特别是消息:“kSecAttrAccessible不等于空指针的地址比较总是正确的”。

编译器告诉我,这两个键在比较时!= NULL总是正确的。

我相信我缺乏计算机科学培训使我无法理解这里的问题 - 也许这只是一种不好的看法?

我看过这个问题,但无法理解与我的 Google Drive SDK 实现文件 GTMOAuth2ViewControllerTouch.m 问题相关的上下文

我真的很想了解根本问题。

请帮忙...

4

2 回答 2

7

您可以使用: accessibility = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly;[keychainQuery setObject:(id)accessibility forKey:(id)kSecAttrAccessible];

这是因为常量永远不会有 NULL 指针,所以没有理由进行检查。我相信可以修复 SDK 的更新,但您可以手动修复。

于 2015-04-11T05:12:31.397 回答
0

Apple 在他们的编译器中添加了一个新的检查,当这些检查永远不会失败时会发出警告,但不幸的是,它是基于当前的部署目标这样做的。但是,对于我们这些在具有多个部署目标的项目之间共享代码的人来说,这个新功能确实令人头疼。

有人告诉我,您可以通过将 -Wno-tautological-pointer-compare 添加到编译器标志来全局禁用警告,或者通过将“&whatever”括在括号中来一次性禁用警告。

于 2015-07-13T22:15:54.313 回答