How can I test an NSString for being nil?

試著忘記壹切 提交于 2019-12-17 18:31:55

问题


Can I simply use

if(myString == nil)

For some reason a string that I know is null, is failing this statement.


回答1:


Is it possible that your string is not in fact nil, and is instead just an empty string? You could try testing whether [myString length] == 0.




回答2:


You can find more on objective C string here.

+ (BOOL ) stringIsEmpty:(NSString *) aString {

    if ((NSNull *) aString == [NSNull null]) {
        return YES;
    }

    if (aString == nil) {
        return YES;
    } else if ([aString length] == 0) {
        return YES;
    } else {
        aString = [aString stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
        if ([aString length] == 0) {
            return YES;
        }
    }

    return NO;  
}

+ (BOOL ) stringIsEmpty:(NSString *) aString shouldCleanWhiteSpace:(BOOL)cleanWhileSpace {

    if ((NSNull *) aString == [NSNull null]) {
        return YES;
    }

    if (aString == nil) {
        return YES;
    } else if ([aString length] == 0) {
        return YES;
    } 

    if (cleanWhileSpace) {
        aString = [aString stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
        if ([aString length] == 0) {
            return YES;
        }
    }

    return NO;  
}



回答3:


you may check your getting string using this

   if(myString==(id) [NSNull null] || [myString length]==0 || [myString isEqualToString:@""])
    {
     //String is null or bad response
    }



回答4:


It seems that my string in the debugger was reporting as (null) but that was due to how it was being assigned, I fixed it and now it is reporting as nil. This fixed my issue.

Thanks!




回答5:


Notice length = 0 doesn't necessary mean it's nil

NSString *test1 = @"";
NSString *test2 = nil;

They are not the same. Although both the length are 0.




回答6:


You can implicitly check for nil (allocated, but not initialized) with this:

if (!myString) { 
    //do something
}

If myString was assigned from a dictionary or array, you may also wish to check for NSNULL like this:

if ([myString isEqual:[NSNull null]]) {
    //do something
}

Finally (as Sophie Alpert mentioned), you can check for empty strings (an empty value):

if ([myString length] == 0) {
    //do something
}

Often, you may want to consolidate the expressions:

if (!myString || [myString length] == 0) {
    //do something
}



回答7:


I encountered this problem today. Despite assigning a string to be nil: NSString *str = nil;, the test if (str == nil) returned FALSE! Changing the test to if (!str) worked, however.




回答8:


Check NSAttributedString is empty:

let isEmpty = atrributedString.string.isEmpty


来源:https://stackoverflow.com/questions/482276/how-can-i-test-an-nsstring-for-being-nil

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!