NSUbiquityIdentityDidChangeNotification 不等于空指针的地址比较总是为真

Posted

技术标签:

【中文标题】NSUbiquityIdentityDidChangeNotification 不等于空指针的地址比较总是为真【英文标题】:Comparison of addresses of NSUbiquityIdentityDidChangeNotification not equal to a null pointer is always true 【发布时间】:2015-11-04 22:41:39 【问题描述】:

我在 Xcode 中收到此警告

comparison of addresses of NSUbiquitycontainerDidChangeNotification not equal to a null pointer is always true

它在核心数据集成框架中

CDEICloudFileSystem.m

- (void)addUbiquityContainerNotificationObservers  

 [self removeUbiquityContainerNotificationObservers];

/// in this line 
if (&NSUbiquityIdentityDidChangeNotification != NULL) 
///

    __weak typeof(self) weakSelf = self;
    ubiquityIdentityObserver = [[NSNotificationCenter defaultCenter] addObserverForName:NSUbiquityIdentityDidChangeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) 
        __strong typeof(weakSelf) strongSelf = weakSelf;
        [strongSelf stopMonitoring];
        [strongSelf willChangeValueForKey:@"identityToken"];
        [strongSelf didChangeValueForKey:@"identityToken"];
    ];
  

谁能告诉我如何解决这个问题?

谢谢

【问题讨论】:

除非您尝试支持 ios 5,否则无需检查 NSUbiquityIdentityDidChangeNotification 常量。 【参考方案1】:

我写了那个代码。正如一些人指出的那样,它可以确保NSUbiquityIdentityDidChangeNotification 符号在使用之前存在。在 iOS 6 之前,该通知不存在。

代码有几年了,现在框架不支持iOS 5,所以我将取消勾选。

更新 原来检查无法删除,因为我们仍然支持 OS X 10.7。所以我添加了#pragmas 来消除警告。

【讨论】:

谢谢!我的应用程序仅支持 iOS 并支持 iOS7 及更高版本,没有 OS X - 所以我要删除该行...!?【参考方案2】:

问题是&NSUbiquityIdentityDidChangeNotification是变量的地址,不能为NULL。 条件if (&NSUbiquityIdentityDidChangeNotification != NULL) 总是值 true 并且 Xcode 警告您该行是无用的。

【讨论】:

如果在iOS 5或更早版本下运行,地址可以是NULL 我支持 iOS7 及更高版本。所以我可以删除该行吗?只是,这不是我的代码,我怕乱了框架:/ 是的,你必须删除if (&NSUbiquityIdentityDidChangeNotification != NULL) @JeremyVizzini 这不是你必须删除它。就是在这种情况下是没有意义的。 @Kreuzberg 如果您不想从实现文件中删除代码,请编写如下表达式:((&NSUbiquityIdentityDidChangeNotification) != NULL)。这将删除 Xcode 7 中的警告。只是另一种选择。

以上是关于NSUbiquityIdentityDidChangeNotification 不等于空指针的地址比较总是为真的主要内容,如果未能解决你的问题,请参考以下文章