IT박스

NSString이 null인지 감지하는 방법은 무엇입니까?

itboxs 2021. 1. 9. 09:38
반응형

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입니다.idnil

While NULLC 포인터 (유형 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

반응형