首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSFormatter问题:未调用空字符串

NSFormatter问题:未调用空字符串
EN

Stack Overflow用户
提问于 2011-01-04 08:48:35
回答 2查看 153关注 0票数 0

我已经为我的(只读)表列创建了一个自定义格式化程序。它看起来是这样的:

代码语言:javascript
复制
- (NSString *)stringForObjectValue:(id)anObject
{ 
  NSAssert([anObject isKindOfClass:[NSString class]] && anObject != nil,
            @"invalid object");

  if ([anObject isEqualToString:@""])
    return @"EMPTY";
  else
    return [anObject stringByAppendingString:@"++"];
}

非常简单。相应的对象只是字符串,所以它是一个字符串到字符串的格式化程序。所有非空字符串对象返回时都附加了@"++"。应将空字符串对象转换为@"EMPTY"字符串。

@"++"可以很好地附加到非空字符串中。

问题是,@"EMPTY"永远不会出现!当底层对象是空字符串时,Cocoa从不调用我的格式化程序。相应的行将一直为空,而不是显示我请求的@"EMPTY"

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-04 09:31:18

我试过你的代码了。这对我来说很管用。代码如下(稍作修改):

非空字符串的

代码语言:javascript
复制
#import "untitled.h"


@implementation untitled

-(void) theMain
{
    NSLog(@"str: %@", [self callMe]);

}


-(NSString *)callMe
{
    NSString *anObject = [[NSString alloc] initWithString:@"s"];

    if ([anObject isEqualToString:@""])
        return @"EMPTY";
    else
        return [anObject stringByAppendingString:@"++"];

}
@end

结果:

代码语言:javascript
复制
2011-01-04 09:23:10.991 string[410:80f] str: s++

现在尝试输入空字符串:

代码语言:javascript
复制
#import "untitled.h"


@implementation untitled

-(void) theMain
{
    NSLog(@"str: %@", [self callMe]);

}


-(NSString *)callMe
{
    NSString *anObject = [[NSString alloc] initWithString:@""];

    if ([anObject isEqualToString:@""])
        return @"EMPTY";
    else
        return [anObject stringByAppendingString:@"++"];

}
@end

结果:

代码语言:javascript
复制
2011-01-04 09:25:42.379 string[441:80f] str: EMPTY

所以你的代码真的很好用。也许你可以向我们展示你的代码的其他部分(也许是调用你的函数的那部分),这样我们就能真正发现问题所在。你的代码,正如张贴的那样,真的很好用。

票数 1
EN

Stack Overflow用户

发布于 2011-01-04 08:57:51

我不确定,但您可能会遇到nil vs null;除非您完全确定它是一个空字符串而不是null,否则您可以使用以下内容进行测试:

[anObject isEqual: [NSNull null]]

不过,只使用if ([anObject length]==0)可能会更简单,因为如果您想要的话,它应该可以处理任何情况,而不是一个以上字符的字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4589743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档