1

我正在尝试HKAnchoredObjectQuery在 iOS 上使用 a 。

为此,我必须为查询提供一个锚点,在这种情况下是一个NSUInteger. 我想保存这个整数以供将来查询,NSUserDefaults只是想使用

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

但是编译器告诉我,我不允许这样做,因为我正在将整数与指针进行比较,并且我理解为什么我不能这样做,但我不知道该怎么做。

错误代码是这样的

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

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

4

4 回答 4

2

NSUInteger is a primitive type, not an object type. NSNumber is an object type. For an NSNumber object, you can check whether it is nil or not. An NSUInteger is never nil because it is an integer, not a pointer.

Many functions that return NSUInteger as a result for a search return the constant NSNotFound if the search failed. NSNotFound is defined as a very large integer (2^31 - 1 for 32 bit, 2^63 - 1) for 64 bit).

于 2015-04-13T12:47:44.570 回答
0

NSUInteger不是一个对象,不能与 nil 比较。用过于简单的术语来说,对象是指向可能包含值或是的内存位置的指针nilNSUInteger只是一个值。它可能是0,或您不期望的其他值,但它会有一个值。

于 2015-04-13T12:47:25.983 回答
0

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

将其存储在NSUserDefaults

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

要从以下位置取回锚点NSUserDefaults

NSNumber *aNumber = [[NSUserDefaults standardUserDefaults] objectForKey:aKey];
if (aNumber != nil) {
    NSUInteger anchor = [aNumber integerValue];
}
于 2015-04-13T12:47:36.067 回答
0

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

在您的情况下,作为锚点NSUInteger,您应该使用整数值代替 nil 作为比较 -

if(anchor != 0) {
// do stuff
}
于 2015-04-13T12:51:05.800 回答