确定NSUInteger是否具有值或为零

时间:2015-04-13 12:42:18

标签: ios health-kit nsuinteger

我试图在iOS上使用HKAnchoredObjectQuery

为此,我必须为查询提供一个锚点,在本例中为NSUInteger。我希望以后在NSUserDefaults中为查询保存此整数,只是想使用

if(anchor != nil) { // do stuff }

但编译器告诉我,我不允许这样做,因为我将整数与指针进行比较,我理解为什么我无法做到这一点,但我不能做到#39我知道怎么做。

错误代码是这个

Comparison between pointer and integer ('NSUInteger' (aka 'unsigned long') and 'void *')

有谁知道我如何确定我的锚是否有值?

4 个答案:

答案 0 :(得分:2)

NSUInteger是基本类型,而不是对象类型。 NSNumber是一种对象类型。对于NSNumber对象,您可以检查它是否为零。 NSUInteger永远不会为零,因为它是整数,而不是指针。

如果搜索失败,许多返回NSUInteger作为搜索结果的函数将返回常量NSNotFound。 NSNotFound被定义为一个非常大的整数(32位为2 ^ 31 - 1,对于64位为2 ^ 63 - 1)。

答案 1 :(得分:0)

NSUInteger不是对象,无法与nil进行比较。在过于简单化的术语中,对象是指向可能包含值或nil的内存位置的指针。 NSUInteger只是一个价值。它可能是0,或者您不期望的其他值,但它会有价值。

答案 2 :(得分:0)

NSUInteger不能为零,因为它不是对象。创建时的默认值为零。要保存在NSUserDefaults中,您可以将其存储为NSNumber,以后可以检查为零。

将其存储在NSUserDefaults

NSNumber *aNumber = @(anchor);
[[NSUserDefaults standardUserDefaults] setObject:aNumber forKey:aKey];

NSUserDefaults获取锚点:

NSNumber *aNumber = [[NSUserDefaults standardUserDefaults] objectForKey:aKey];
if (aNumber != nil) {
    NSUInteger anchor = [aNumber integerValue];
}

答案 3 :(得分:0)

NSUInteger或简单地int基本上是原始数据类型,它们应该与相应数据类型范围内的整数值进行比较。 nil与引用的对象一起使用。

在你的情况下,因为锚是NSUInteger所以你应该使用整数值来代替nil作为比较 -

if(anchor != 0) {
// do stuff
}