2015-01-22 11 views
0

늦게까지 NSStringstringWithFormat: 메서드로 많은 문제가있었습니다. 나는 가운데 맞춤, 오른쪽 맞춤 또는 왼쪽 맞춤 N 줄의 텍스트 (줄 바꿈)를 정렬 할 수있는 개체를 작성했습니다. 내 논리의 핵심은 NSStringstringWithFormat입니다. 이 함수를 사용하여 원하는 줄 맞춤을 만들기 위해 줄마다 공백을 사용하여 줄을 채 웁니다. 다음은 그 예이다 : 당신이 위의 예는 위대한 작품을 볼 수있는NSString stringWithFormat 통화 기호와 같은 특수 문자로 작동하지 않습니다.

NSString *str = @"$3.00" --> 3 dollars 
[NSString stringWithFormat:@"%8s", [str cStringUsingEncoding:NSUnicodeStringEncoding]] --> returns --> " $3.00" 

, 나는 왼쪽에 3 개 공간을 채워 그 결과 텍스트/오른쪽 정렬 정렬됩니다. 외화 기호를 전달하기 시작할 때 문제가 발생하기 시작합니다. 서식이 바로 위로 올라가는 것은 작동하지 않습니다. 여분의 기호를 추가하거나 그냥 가비지를 반환합니다.

NSString *str = @"Kč1.00" --> 3 Czech Koruna (Czech republic's currency) 
[NSString stringWithFormat:@"%8s", [str cStringUsingEncoding:NSUnicodeStringEncoding]] --> returns --> " Kč1.00" 

위는 이제 문자열 인코딩 전문가가 아니라고하지만 NSString 기본 ASCII 도메인 외부에 잘 특수 문자에 대한 국제 표준 유니 코드 인코딩을 사용합니다 알고 ... 잘못 알아 단지 평평하다.

문제를 어떻게 해결할 수 있습니까? 어떤 인코딩을 사용해야합니까? 나는 많은 다른 인코딩 enum을 시도했는데, NSMACOSRomanEncoding에서 NSUTF32UnicodeBigEndian까지의 모든 것을 잃어 버렸다. 나의 최후의 수단은 stringWithFormat을 완전히 함께 사용하는 것일 것이다. 어쩌면 단순한 UTF8Strings 및 기본 심볼을위한 것일 수도있다.

+1

그런 시도를해도 운이 좋지 않을 것입니다. NSNumberFormatter로 전환하십시오. 이것은 통화가 접두사 인 접미사와 네가티브 등의 로컬 스타일 표현을 포함하여 로케일의 적용 범위를 포함하여 정확하게 목적을 위해 설계되었습니다. –

+0

예, stringWithFormat을 사용하지 않도록 전환 할 것입니다. 감사합니다 – AyBayBay

답변

3

NSNumberFormatter 통화 스타일 (NSNumberFormatterCurrencyStyle)을 사용하는 경우 통화를 나타내려면 훨씬 더 좋습니다. currentLocale을 읽고이를 기반으로 통화를 표시합니다. 문자열 표현을 요청하고 문자열에 추가하기 만하면됩니다. 유니 코드 형식을 관리하는 것보다 훨씬 쉽습니다. 자습서를 확인하십시오. here

+0

예 @Andrea NSNumberFormatter가 통화로가는 길에 동의합니다 ...하지만 내 개체는 모든 텍스트/문자열을 정렬해야합니다. 통화 기호의 경우를 다루기 위해 더 특수화 된 코드를 작성하고 싶지는 않습니다. 부가 가치가 충분하지 않습니다. 어쩌면 더 나은 방법은 NSString의 padSpace 메서드를 사용하고 stringWithFormat을 함께 사용하는 것을 잊는 것입니다. 난 그냥 일반 NSString 의이 불가 지론을 ​​만들려고 노력하고 전달 된 모든 문자열을 정당화해야합니다. – AyBayBay

+0

아마도 stringWithFormat을 피하는 것이 가장 좋습니다. – AyBayBay

+0

나는 솔직히 말하면, 내가 텍스트를 표시하는 특정 객체를 만든 이유와 속성이 지정된 문자열이 포함 된 레이블이나 텍스트 뷰를 사용하지 않은 이유와 같이 완전히 문제가 발생하지 않는다고 말해야합니다. 문자열을 코딩하는 것은 실제로 고통 스러울 수 있습니다. – Andrea

1

이 당신에게 필요한 결과를 줄 것이다

NSString *str = @"Kč1.00"; 

str=[NSString stringWithFormat:@"%@%[email protected]",[@" " stringByPaddingToLength:3 withString:@" " startingAtIndex:0],str]; 

넣어 : "Kč1.00"@;

+0

몇 가지 내 대답이 잘못되었거나 질문을 이해하지 못했습니까? –

+0

왜 이런 복잡한 회신을 제안 하시겠습니까? 간단히 stringWithFormat을 사용할 수 있도록 어떤 인코딩을 사용해야하는지 간단히 묻습니다. 또는 stringWithFormat이 갈 길이 멀지 않은 경우 ... 또는 솔루션이 동적 인 것이 아니라면 예제의 목적에 맞는 것만 같습니다. – AyBayBay

0

그냥 하나 더 트릭이를 달성하기 위해 - 을 당신이 그것을 사용 :

[NSString stringWithFormat:@"%8s%@",[@"" cStringUsingEncoding:NSUTF8StringEncoding],str]; 

이 너무 작동합니다 좋아합니다.