2011-01-04 3 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로 실행 중일 수 있습니다. 당신이 null이 아닌 빈 문자열이고 완전히 확신하지 않는 한, 당신은 같은 뭔가를 테스트 할 수 있습니다

[anObject isEqual: [NSNull null]]

그것은 수도가되는 이외의 경우를 잡을해야처럼, 그러나 if ([anObject length]==0)을 사용하는 간단 그게 당신의 욕망이라면, 한 문자 이상의 문자열.

+0

아니, [NSNull null]이 아니 었습니다. 예, 길이 == 0을 사용할 수 있지만 여기서는별로 도움이되지 않습니다. – Enchilada

관련 문제