2011-01-04 2 views
0

私の(読み取り専用の)テーブル列用のカスタムフォーマッタを作成しました。これは次のようになります。NSFormatterの問題:空の文字列が呼び出されない

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

この問題は、NSTextFieldCellのプレースホルダ文字列と関係しているようです。残念ながら、デフォルトでは常にグレー表示されているため、カスタマイズできないようです。 – Enchilada

答えて

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 

コードが実際に動作しています。おそらく、コードの他の部分(あなたの関数をおそらく呼び出す人)を示すことができるので、本当に問題を見つけることができます。投稿されたコードが実際に動作しています。

0

わかりませんが、あなたはnil vs nullに入っている可能性があります。

[anObject isEqual: [NSNull null]]

ことがあること以外のケースをキャッチする必要があるとして、ちょうどしかしif ([anObject length]==0)を使用する方が簡単かもしれません:あなたはそれが空の文字列とnullではありません完全に確信している場合を除き、あなたのような何かをテストすることができますそれがあなたの願いであれば、1文字以上の文字列。

+0

ナー、それは[NSNull null]ではありませんでした。はい、私は長さ== 0を使うことができましたが、ここではあまり役に立ちません。 – Enchilada

関連する問題