2010-03-31 80 views
1

我的问题是,if语句不工作。第一行代码的变量包含值“(空)”后,因为谁从他的iPhone地址簿中选择了接触用户不设置此联系人的国家重点,到目前为止,一切顺利。检查,如果(国家== @“(空)”不工作

,但如果我检查变量,它不会是真实的,但价值肯定是“(空)” ...没有一个人有一个想法?

NSString *country = [NSString [the dict objectForKey:(NSString *)kABPersonAddressCountryKey]]; 

if(country == @"(null)") 
{ 
     country = @""; 
} 

在此先感谢
肖恩

回答

5

正确的表达应该是:

if (country == nil) 

可以进一步简化为:

if (!country) 

如果你真的想测试与@"(null)"字符串相等,你应该使用isEqual:方法或isEqualToString:

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

当使用==运算符进行比较时,您是co mparing对象的地址,而不是它们的内容:

NSString *foo1 = [NSString stringWithString:@"foo"]; 
NSString *foo2 = [NSString stringWithString:@"foo"]; 
NSAssert(foo1 != foo2, @"The addresses are different."); 
NSAssert([foo1 isEqual:foo2], @"But the contents are same."); 
NSAssert([foo1 isEqualToString:foo2], @"True again, faster than isEqual:."); 
+0

我已经试过了,它不与零工作。因为如果我将这个变量设置为文本字段,该文本字段会显示“空”,并像你想象的 – Sean 2010-03-31 15:36:50

+0

感谢zoul,与isEqualToString它的工作原理就不会是空的。我从来没有在==,isEqualToString或比较之间做出区别......这些比较方法之间的区别究竟是什么? – Sean 2010-03-31 15:46:19

+0

噢,非常感谢这个简短的解释。 – Sean 2010-03-31 15:48:14

-2

这是一个伟大的答案,我不知道有检查零或空字符串的所有这些不同的方式。