ios - What is the right way to check for a null string in Objective-C?

ID : 20374

viewed : 10

Tags : iosobjective-ccocoa-touchios

Top 5 Answer for ios - What is the right way to check for a null string in Objective-C?

vote vote

92

As others have pointed out, there are many kinds of "null" under Cocoa/Objective C. But one further thing to note is that [title isKindOfClass:[NSNull class]] is pointlessly complex since [NSNull null] is documented to be a singleton so you can just check for pointer equality. See Topics for Cocoa: Using Null.

So a good test might be:

if (title == (id)[NSNull null] || title.length == 0 ) title = @"Something"; 

Note how you can use the fact that even if title is nil, title.length will return 0/nil/false, ie 0 in this case, so you do not have to special case it. This is something that people who are new to Objective C have trouble getting used to, especially coming form other languages where messages/method calls to nil crash.

vote vote

83

it is just as simple as

if([object length] >0) {   // do something } 

remember that in objective C if object is null it returns 0 as the value.

This will get you both a null string and a 0 length string.

vote vote

75

Refer to the following related articles on this site:

I think your error is related to something else as you shouldn't need to do the extra checking.

Also see this related question: Proper checking of nil sqlite text column

vote vote

66

I have found that in order to really do it right you end up having to do something similar to

if ( ( ![myString isEqual:[NSNull null]] ) && ( [myString length] != 0 ) ) { } 

Otherwise you get weird situations where control will still bypass your check. I haven't come across one that makes it past the isEqual and length checks.

vote vote

58

Whats with all these "works for me answers" ? We're all coding in the same language and the rules are

  1. Ensure the reference isn't nil
  2. Check and make sure the length of the string isn't 0

That is what will work for all. If a given solution only "works for you", its only because your application flow won't allow for a scenario where the reference may be null or the string length to be 0. The proper way to do this is the method that will handle what you want in all cases.

Top 3 video Explaining ios - What is the right way to check for a null string in Objective-C?

Related QUESTION?