Iphone 如何检查nsdictionary中的字符串是否为空

Iphone 如何检查nsdictionary中的字符串是否为空,iphone,ios,twitter,nsdictionary,Iphone,Ios,Twitter,Nsdictionary,我正在开发一个推特应用程序,并试图实现推特定位。我只想显示国家的名称,如果tweet有位置,就在地图上显示。但无论我尝试了什么,它总是显示第一条推文的国家,或者如果为空,应用程序就会崩溃。我不明白我做错了什么。有人能帮忙吗?非常感谢。 这是我的密码: // LOCATION for (NSDictionary *dic in self.dataSource) { NSString *str = [dic valueForKeyPath:@"place.name

我正在开发一个推特应用程序,并试图实现推特定位。我只想显示国家的名称,如果tweet有位置,就在地图上显示。但无论我尝试了什么,它总是显示第一条推文的国家,或者如果为空,应用程序就会崩溃。我不明白我做错了什么。有人能帮忙吗?非常感谢。 这是我的密码:

   // LOCATION
   for (NSDictionary *dic in self.dataSource)
    {
        NSString *str = [dic valueForKeyPath:@"place.name"];
        if(str)
        {
            cell.button.hidden = NO;
            cell.location.text = [dic valueForKeyPath:@"place.full_name"];
            self.coordinates = [dic valueForKeyPath:@"geo.coordinates"];
            break;
        } else {
            cell.button.hidden = YES;
            cell.location.hidden = YES;
            break;
        }

    }
这是NSLog输出:

  2013-08-20 00:04:42.269 TwitterApplication[10011:c07] <null>
  2013-08-20 00:04:42.269 TwitterApplication[10011:c07] Downtown
  2013-08-20 00:04:42.269 TwitterApplication[10011:c07] <null>
  2013-08-20 00:04:42.270 TwitterApplication[10011:c07] Moscow
  2013-08-20 00:04:42.270 TwitterApplication[10011:c07] Брянск
  2013-08-20 00:04:42.270 TwitterApplication[10011:c07] <null>
  2013-08-20 00:04:42.271 TwitterApplication[10011:c07] Брянск
  2013-08-20 00:04:42.271 TwitterApplication[10011:c07] <null>
  2013-08-20 00:04:42.271 TwitterApplication[10011:c07] <null>
  2013-08-20 00:04:42.272 TwitterApplication[10011:c07] <null>
  2013-08-20 00:04:42.272 TwitterApplication[10011:c07] <null>
  2013-08-20 00:04:42.272 TwitterApplication[10011:c07] <null>
  2013-08-20 00:04:42.273 TwitterApplication[10011:c07] <null>
  2013-08-20 00:04:42.273 TwitterApplication[10011:c07] <null>
2013-08-20 00:04:42.269推特应用程序[10011:c07]
2013-08-20 00:04:42.269 TwitterApplication[10011:c07]市中心
2013-08-20 00:04:42.269推特应用程序[10011:c07]
2013-08-20 00:04:42.270推特应用程序[10011:c07]莫斯科
2013-08-20 00:04:42.270推特应用程序[10011:c07]Бааа
2013-08-20 00:04:42.270推特应用程序[10011:c07]
2013-08-20 00:04:42.271推特应用程序[10011:c07]ББааа
2013-08-20 00:04:42.271推特应用程序[10011:c07]
2013-08-20 00:04:42.271推特应用程序[10011:c07]
2013-08-20 00:04:42.272推特应用程序[10011:c07]
2013-08-20 00:04:42.272推特应用程序[10011:c07]
2013-08-20 00:04:42.272推特应用程序[10011:c07]
2013-08-20 00:04:42.273推特应用程序[10011:c07]
2013-08-20 00:04:42.273推特应用程序[10011:c07]

为什么要检查@“place.name”的值,然后使用@“place.full\u name”?也许这就是问题所在

我认为你在使用它之前必须检查@“geo.coordinates”值

尝试将if语句更改为
if(str&&str.lengh)

并更改
NSString*str=[dic valueForKeyPath:@“place.name”]

to
NSString*str=[[dic valueForKeyPath:@“place.name”]lastObject]
因为valueForKeyPath返回一个数组。

什么代码生成该日志?如果tweet有位置,则为城市名称,如果没有位置,则为null。显示它的代码以及它与显示的代码的关系。它是这样的:for(NSDictionary*dic in self.dataSource){NSString*str=[dic valueForKeyPath:@“place.name”];NSLog(@“%@”,str);}我只是想确定我得到的是城市名称。正如你所说,这个str可能是空的。尝试使用if([str isEqualToString:@”“])。不幸的是,我认为问题与if有关,但我不确定。@Blaze但检查一个值和使用另一个值有什么意义?这是一个错误,我在没有位置的推文中更改为@“place.name”错误,NSNull长度。我有非常奇怪的输出。似乎它还记得str的第一个值,并且在这个循环中没有改变。我使用SLRequest到twitterapi,它有很多代码。我按照您告诉我的那样做了,但它再次出错:'-[NSNull lastObject]:未识别的选择器已发送到实例0x1664678'