我已经为我的(只读)表列创建了一个自定义格式化程序。它看起来是这样的:
- (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"。
有什么想法吗?
发布于 2011-01-04 09:31:18
我试过你的代码了。这对我来说很管用。代码如下(稍作修改):
非空字符串的:
#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所以你的代码真的很好用。也许你可以向我们展示你的代码的其他部分(也许是调用你的函数的那部分),这样我们就能真正发现问题所在。你的代码,正如张贴的那样,真的很好用。
发布于 2011-01-04 08:57:51
我不确定,但您可能会遇到nil vs null;除非您完全确定它是一个空字符串而不是null,否则您可以使用以下内容进行测试:
[anObject isEqual: [NSNull null]]
不过,只使用if ([anObject length]==0)可能会更简单,因为如果您想要的话,它应该可以处理任何情况,而不是一个以上字符的字符串。
https://stackoverflow.com/questions/4589743
复制相似问题