2014-06-23 2 views
0

Apple iOS 문서의 아래 예제는 허위와 실수로 가득차 있습니다. 코드를 Xcode에 삽입했는지 의심 스럽습니다! Null Values in Using Predicates술어를 사용할 때의 Null 값

그러나 저는 정말 작가가 가난한 독자를 보여주고 싶었는지 알고 싶습니다! 누구나 그 허접한 코드를 수정할 수 있습니까?

감사합니다 !!!

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

널값 비교 술어 즉 (널 (무)를 제외한 널 또는 널 값 NSNull 값과 일치하지 않는 , ($ value == nil)은 $ value가 nil이면 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를 가져와서 왜 술어를 적용하는 이유가 무엇입니까? 단순히 술어를 사용하지 않고 모두 가져옵니다. 여전히 firstName nil을 설정하는 대신 술어 thn을 사용하려면 술어 nil을 설정하십시오. NSArray * filteredArray = [배열 filteredArrayUsingPredicate : 없음]; : p –

+0

@ iVishal + @ CrimsonChris : 데모 코드는 Apple의 가이드에서 나온 것으로 술어에 관한 것입니다. 제 원래 질문 안의 링크를 클릭하십시오. –

답변

0

먼저 수정. 리터럴이 잘못되었습니다.

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

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

나는 그것을 미화했습니다. (I나요?)

그것은 nil 인 값에 비교가 항상 비교 상수를 제외하고, NO로 평가 것, 보여주고 싶어

가 null (nil, [NSNull null]의 일종이다, 아마,하지만 문서 번호 : Nil).

더 중요한 것은 null 값의 종류를 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 : 답변 해 주셔서 감사합니다! if ([a isEqual : b])에 도달하지 않은 것은 두 개의 "nil"객체 (포인터)의 내용이 동일하지 않기 때문입니까? –

+0

'nil '에 대한 메세지의 결과는 항상 0이기 때문에 (부울 타입에 대해서는'NO'를 의미합니다). 그러므로'a'가'nil' 만 중요하다는 것입니다. (하지만'b'가'nil '이 아니라면, 아무도'NO'가 반환되는 이유가 궁금합니다. –