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的占位符字符串有关。遗憾的是,默认情况下它总是显示为灰色,而且我似乎无法自定义它。