NSString이 null인지 감지하는 방법은 무엇입니까?
나는이 있는지 여부를 감지 코드 조각이 NSString
있다 NULL
, nil
등 그러나, 충돌을. 내 코드는 다음과 같습니다.
NSArray *resultstwo = [database executeQuery:@"SELECT * FROM processes WHERE ready='yes' LIMIT 0,1"];
for (NSDictionary *rowtwo in resultstwo) {
NSString *getCaption = [rowtwo valueForKey:@"caption"];
if (getCaption == NULL) {
theCaption = @"Photo uploaded...";
} else if (getCaption == nil) {
theCaption = @"Photo uploaded...";
} else if ([getCaption isEqualToString:@""]) {
theCaption = @"Photo uploaded...";
} else if ([getCaption isEqualToString:@" "]) {
theCaption = @"Photo uploaded...";
}
}
그리고 여기에 오류가 있습니다.
포착되지 않은 예외 '
NSInvalidArgumentException
' 로 인해 앱 종료 중 , 이유 : '-[NSNull isEqualToString:]
: 인식 할 수없는 선택기가0x3eba63d4
' 인스턴스로 전송되었습니다.
내가 뭘 잘못하고 있니? 다른 방법으로해야합니까?
Objective-C 객체 (유형 ) 의 NULL
값 은 입니다.id
nil
While NULL
은 C 포인터 (유형 void *
)에 사용됩니다.
(결국 둘 다 같은 값 ( 0x0
)을 갖게됩니다. 그러나 유형이 다릅니다.)
에서 목표 - C :
nil
(모두 소문자) 는 Objective-C 객체에 대한 널 포인터 입니다.Nil
(대문자) 는 Objective-C 클래스에 대한 널 포인터 입니다.NULL
(모두 대문자) 는 다른 모든 것에 대한 널 포인터입니다 ( C 포인터 , 즉) .[NSNull null]
nil을 사용할 수없는 상황에 대한 싱글 톤 입니다 ( 예 : s에 nil 추가 / 수신 ).NSArray
에서 ++ 목표 - C :
- 위의 모든 항목에 다음 항목이 추가됩니다.
null
(소문자) 또는nullptr
( C ++ 11 이상)은 C ++ 객체에 대한 널 포인터 입니다.
따라서 확인하려면 명시 적으로nil
비교 nil
(또는 NULL
각각) 해야합니다 .
if (getCaption == nil) ...
또는 ObjC / C 가 암시 적 으로 수행하도록 합니다.
if (!getCaption) ...
이것은 C의 모든 표현식 (그리고 Objective-C 가 그 상위 집합 인 경우)에 암시 적 부울 값이 있기 때문에 작동합니다.
expression != 0x0 => true
expression == 0x0 => false
이제 검사 할 때 NSNull
분명히이 같은 작동하지 않을 [NSNull null]
의 싱글 인스턴스에 대한 포인터 반환 NSNull
, 그리고 nil
, 따라서 그것은 동일하지 않습니다 0x0
.
따라서 NSNull
하나 를 확인 하려면 다음 중 하나를 사용할 수 있습니다.
if ((NSNull *)getCaption == [NSNull null]) ...
또는 (선호, 의견 참조) :
if ([getCaption isKindOfClass:[NSNull class]]) ...
Keep in mind that the latter (utilising a message call) will return false
if getCaption
happens to be nil
, which, while formally correct, might not be what you expect/want.
Hence if one (for whatever reason) needed to check against both nil
/NULL
and NSNull
, one would have to combine those two checks:
if (!getCaption || [getCaption isKindOfClass:[NSNull class]]) ...
For help on forming equivalent positive checks see De Morgan's laws and boolean negation.
Edit: NSHipster.com just published a great article on the subtle differences between nil, null, etc.
You should use
if ([myNSString isEqual:[NSNull null]])
This will check if object myNSString is equal to NSNull object.
Preferred Way to check for the NSNULL
is
if(!getCaption || [getCaption isKindOfClass:[NSNull class]])
if([getCaption class] == [NSNull class])
...
You can also do
if([getCaption isKindOfClass:[NSNull class]])
...
if you want to be future proof against new subclasses of NSNull.
Just check with this code:
NSString *object;
if(object == nil)
This should work.
ReferenceURL : https://stackoverflow.com/questions/5684157/how-to-detect-if-nsstring-is-null
'IT박스' 카테고리의 다른 글
코드에서 동적 리소스 스타일을 할당하는 방법은 무엇입니까? (0) | 2021.01.09 |
---|---|
최대 너비를 사용하여 CSS에서 비례 적으로 이미지 크기 조정 (0) | 2021.01.09 |
일반 텍스트 출력을위한 Python 기술 또는 간단한 템플릿 시스템 (0) | 2021.01.09 |
신속한 UITableView set rowHeight (0) | 2021.01.09 |
Android는 '? attr / selectableItemBackground'기호를 확인할 수 없습니다. (0) | 2021.01.09 |