我为我的(只读)表列创建了一个自定义格式化程序。它看起来像这样:
- (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"
。
有什么想法吗?
答案 0 :(得分:1)
我已经尝试过你的代码了。它对我有用。这是代码(稍加修改):
非空字符串:
#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
所以你的代码确实有效。也许你可以向我们展示你的代码的其他部分(或许也可以调用你的函数),所以我们可以真正发现问题。您发布的代码确实有效。
答案 1 :(得分:0)
我不确定,但你可能会遇到nil vs null;除非你完全确定它是一个空字符串而不是null,你可以测试类似的东西:
[anObject isEqual: [NSNull null]]
然而,使用if ([anObject length]==0)
可能更简单,因为除了是一个包含多个字符的字符串之外,它应该可以捕获任何情况,如果这是你的愿望。