2012-09-29 48 views
1

我使用下面的代碼從一個NSDictionary中得到的NSString,然後將它轉換成NSURL:如何檢查NSURL是否包含NSString null?

NSURL * url = [NSURL URLWithString:[self.item objectForKey:@"website"]]; 

的NSDictionary的self.item來自Web服務器和它使用JSON數據填寫正確。 NSDictionary中的所有其他對象都可以很好地工作。

但是有時候web服務器會傳遞一個帶有文本「null」的網站url,因爲該對象沒有填入網站。從調試中我發現NSURL對象可以包含帶有「null」文本的url。但是,我該如何防止這種情況,或者我該如何編寫一個if語句來檢查這個問題?

我試過如下:

NSString * niks = [eventUrl absoluteString]; 
if(niks == @"null") 
{ 
    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Event" message:@"Event heeft geen website" delegate:nil cancelButtonTitle:@"Oke" otherButtonTitles:@"Oke", nil]; 
    [message show]; 
} 
else 
{ 
    [webView loadRequest:[NSURLRequest requestWithURL:eventUrl]]; 
    NSLog(@"%@",eventUrl); 
} 

但是,這並不工作,它總是直接將URL的網頁視圖。有人能讓我朝着正確的方向嗎?

回答

3

您的比較;

if(niks == @"null") 

只比較指針是否相等(即,如果兩個是相同的字符串對象實例)。由於一個是常量,另一個是從服務器獲取的JSON中動態創建的,所以不太可能。

要比較兩個字符串的內容,您應該做;

if([niks isEqualToString:@"null"]) 

對於鏈接口渴,here is the [NSString isEqualToString:] documentation

1

要做字符串比較,你需要做[niks isEqualToString:@「null」],這就是爲什麼第一個條件被破壞的原因。 你也可以使用[niks RangeOfString:@「null」];

0

我相信你可以這樣做:

id str = [self.item objectForKey:@"website"]; 
if([str isMemberOfClass[NSNull class]]) { 
    ... its null 
} 

的JSON轉換器的所有變化空到NSNull對象(在我的經驗)。

0

我不是100%清除了我的記憶,但是我遇到了[NSDictionary objectForKey:]實際上返回了NSNull類實例而不是「null」字符串的情況。

如果是這種情況,可以使用isKindOfClass方法檢查[self.item objectForKey:@"website"]的類。