2014-06-23 33 views
0

以下來自Apple iOS文檔的示例充滿了垃圾和錯誤,我懷疑它們是否曾將代碼放入Xcode中! Null Values in Using Predicates使用謂詞時的空值

但是我真的很想知道作家真的想向窮人讀者展示什麼! 任何人都可以糾正這些蹩腳的代碼,使其對話題有意義嗎?

謝謝!

================

Null值 比較謂詞不任何值與除空(零)空或NSNull空值匹配(即,($ value == nil)如果$ value爲零,則返回YES)。考慮下面的例子。


NSString *firstName = @"Ben"; 
NSArray *array = @[ @{ @"lastName" : "Turner" }]; 
        @{ @"firstName" : @"Ben", @"lastName" : @"Ballard", 
         @"birthday", [NSDate dateWithString:@"1972-03-24 10:45:32 
+0600"] } ]; 
NSPredicate *predicate = 
    [NSPredicate predicateWithFormat:@"firstName like %@", firstName]; 
NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate]; 
NSLog(@"filteredArray: %@", filteredArray); 

// Output: 
// filteredArray ({birthday = 1972-03-24 10:45:32 +0600; firstName = Ben; lastName = Ballard;}) 

謂詞不匹配包含該鍵的firstName值本字典,但不匹配的字典,該鍵的firstName沒有價值。

+1

爲什麼你希望它給你一個沒有名字的條目,當你按名字過濾時? – CrimsonChris

+0

如果你想獲取所有firstNames thn爲什麼你甚至應用謂詞?簡單地獲取所有而不使用謂詞。如果你想使用predicate thn而不是設置firstName nil,那麼設置你的謂詞nil。 NSArray * filteredArray = [array filteredArrayUsingPredicate:nil]; :p –

+0

@ iVishal + @ CrimsonChris:演示代碼來自Apple的指南,這些指南都是關於謂詞的。請點擊原始問題中的鏈接。 –

回答

0

先修正。字面意思是錯的:

NSArray *array = @[ 
        @{ @"lastName" : @"Turner" }, 

        @{ 
         @"firstName" : @"Ben",                  
         @"lastName" : @"Ballard", 
         @"birthday" : [NSDate dateWithString:@"1972-03-24 10:45:32 +0600"] 
        } 
        ]; 

我美化了一下。 (不是嗎?)

它想表明,這一個值是nil,比較結果將總是爲NO,但這類比較常數是一種空(nil[NSNull null]的,而且很可能,但不記錄在Nil)。

此外,這似乎更重要,它要顯示,如果您將一種空值與nil的值進行比較,則它的計算結果爲YES。這個問題有待澄清,因爲有以下問題:

id a = nil; 
id b = a; // Pretty equal 

if ([a isEqual:b]) 
{ 
    // not reached, because isEqual: will return NO (nil behavior) 
} 
+0

Amin Negm-Awad:謝謝你的回答!如果([a isEqual:b])沒有達到,是因爲兩個「nil」對象(指針)的內容不相等? –

+0

這是,因爲消息的結果是'nil'總是0(布爾類型的含義是「NO」)。所以'a'是'nil'唯一重要的。 (但是如果'b'不是'nil',沒有人想知道爲什麼'NO'被返回。 –