簡體   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