2

我使用以下代码从 NSDictionary 获取 NSString,然后将其转换为 NSUrl:

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

NSDictionaryself.item来自 Web 服务器,并使用 JSON 数据正确填充。NSDictionary 中的所有其他对象都可以正常工作。

但有时网络服务器会传递一个带有文本“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 直接传递给 webview。有人可以让我朝着正确的方向前进吗?

4

4 回答 4

3

你的比较;

if(niks == @"null")

仅比较指针是否相等(即如果两者是相同的字符串对象实例)。由于一个是常量,另一个是从服务器获取的 JSON 动态创建的,因此不太可能。

要比较两个字符串的内容,您应该这样做;

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

对于链接渴求,这里是 [NSString isEqualToString:] 文档

于 2012-09-29T17:18:10.843 回答
1

要进行字符串比较,您需要执行 [niks isEqualToString:@"null"],这就是第一个条件被破坏的原因。您也可以使用 [niks RangeOfString:@"null"];

于 2012-09-29T17:16:44.033 回答
0

我相信你可以做到这一点:

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

JSON 转换器都将 null 更改为 NSNull 对象(根据我的经验)。

于 2012-09-29T17:19:14.533 回答
0

我不是 100% 清楚我的记忆,但我遇到了[NSDictionary objectForKey:]实际返回NSNull类实例而不是“null”字符串的情况。

如果是这种情况,您可以[self.item objectForKey:@"website"]使用isKindOfClass方法检查类。

于 2012-09-29T17:20:21.617 回答