Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa NSFormatter问题:未调用空字符串_Cocoa - Fatal编程技术网

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

Cocoa NSFormatter问题:未调用空字符串,cocoa,Cocoa,我已经为我的(只读)表列创建了自定义格式化程序。看起来是这样的: - (NSString *)stringForObjectValue:(id)anObject { NSAssert([anObject isKindOfClass:[NSString class]] && anObject != nil, @"invalid object"); if ([anObject isEqualToString:@""]) return @"E

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

- (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”


有什么想法吗?

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

[anObject isEqual:[NSNull-null]]


如果([anObject length]==0)只使用
可能会更简单。
但是,如果您愿意的话,它可以处理除一个以上字符的字符串以外的任何情况。

我已经尝试了您的代码。这对我很有用。以下是代码(稍加修改):

对于非空字符串:

#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
2011-01-04 09:23:10.991 string[410:80f] str: s++
#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
结果:

#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
2011-01-04 09:23:10.991 string[410:80f] str: s++
#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
现在尝试空字符串:

#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
2011-01-04 09:23:10.991 string[410:80f] str: s++
#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
结果:

2011-01-04 09:25:42.379 string[441:80f] str: EMPTY

所以你的代码真的很有效。也许您可以向我们展示代码的其他部分(可能是调用您的函数的部分),这样我们才能真正发现问题所在。正如所发布的,您的代码确实有效。

不,它不是[NSNull]。是的,我可以使用length==0,但在这里没有多大帮助。看起来这个问题与NSTextFieldCell的占位符字符串有关。遗憾的是,默认情况下它总是显示为灰色,而且我似乎无法自定义它。