繁体   English   中英

确定NSUInteger是否具有值或为零

[英]Determine if NSUInteger has a value or is nil

我正在尝试在iOS上使用HKAnchoredObjectQuery

为此,我必须为查询提供锚点,在本例中为NSUInteger 我想在NSUserDefaults保存此整数以供将来查询,只是想使用

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

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

错误代码是这个

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

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

NSUInteger是原始类型,而不是对象类型。 NSNumber是对象类型。 对于NSNumber对象,可以检查它是否为nil。 NSUInteger永远不会为零,因为它是一个整数,而不是指针。

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

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

NSUInteger不能为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];
}

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

在您的情况下,由于anchor是NSUInteger因此您应该使用整数值代替nil as-

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM