NSString类别方法未被调用

时间:2013-04-05 14:21:25

标签: ios objective-c

我想解决的问题是将nil字符串转换为空字符串,因此我可以将其作为NSDictionary中的值。

我有以下代码:

//Accessed in class  
prospect.title = [self.titleLabel.text emptyWhenNil];

// NSString+Additions Category

-(NSString *) emptyWhenNil
{
   if(self == nil)
      return @"";

   return self;
 }

但由于某些原因,甚至从未调用emptyWhenNil方法!我迷路了..

3 个答案:

答案 0 :(得分:13)

问题是,当您的字符串指针为nil时,您没有对象发送该类别消息。在Objective-C中未执行到nil的消息(并返回nil)。

如果你想把" null"将对象转换为集合(例如NSDictionaryNSArray),您可以改为使用NSNull类。

或者,您可以将此方法实现为类方法:

+ (NSString *)emptyStringIfNil:(NSString *)str {
    if (!str) return @"";
    return str;
}

然后你会将其称为

prospect.title = [NSString emptyStringIfNil:self.titleLabel.text];

答案 1 :(得分:1)

如果NSString指针为nil,则不会调用该方法,您可以创建一个静态方法:

+ (NSString *) emptyIfNil:(NSString *) str
{
    return str == nil ? @"" : str;
}

答案 2 :(得分:1)

如果字符串为nil,则没有self来执行该方法。在这种情况下,运行时的默认行为是返回默认的nil值。

您应该将其实现为静态方法。像这样:

+ (NSString *)emptyStringIfNil:(NSString *)input
{
    return input ? input : @"";
}