了解NSString分配

时间:2012-02-08 17:51:08

标签: objective-c ios nsstring

[myDictionary objectForKey:kYourKey];

返回NSString对象,但是代码如下:

if (![[myDictionary objectForKey:kYourKey] isEqualToString:@"<null>"])
{
   //Conditional Code.
}

让我退出了应用程序。但是以下工作非常好:

NSString *tempStr = [NSString stringWithFormat:@"%@", [myDictionary objectForKey:kYourKey]];
if (![tempStr isEqualToString:@"<null>"])
{
    //Conditional Code.
}

这有什么区别?

3 个答案:

答案 0 :(得分:3)

实际上并没有返回字符串,通过使用stringWithFormat,您将null转换为字符串@"<null>"。这个测试可能更合适,

id testObject = [myDictionary objectForKey:kYourKey];
if(testObject != nil && ![testObject isKindOfClass:[NSNull class]]){
//Conditional Code
}

修改

[NSNull null]也是一个单例,因此您可以将上述测试转换为更紧凑的测试。

id testObject = [myDictionary objectForKey:kYourKey];
if(testObject == [NSNull null]){
    //Conditional Code
}

答案 1 :(得分:2)

尝试

po [myDictionary objectForKey:kYourKey]

在调试器中,或

NSLog(@"%@", NSStringFromClass([[myDictionary objectForKey:kYourKey] class]);

我的猜测是该对象NSString,而是NSNull

编辑:是的。我错过了你的上一条评论。确实是NSNull

答案 2 :(得分:-2)

的类型转换

if(![((NSString*)[myDictionary objectForKey:kYourKey]) isEqualToString:@"<null>"])