2012-01-24 2 views
4

좋아, 나는 공식적으로 깜짝 놀랐다. 나는 얼마 전부터 IOS 프로젝트를 시작했고, 처음에는 현지화로 약간의 혼란을 겪었는데, 이것은 조금은 혼란 스러웠다. 왜냐하면 나는 그 일을 제대로 수행 할 방법을 몰랐기 때문이다.NSLocalizedString은 아무 곳에도 정의되지 않은 텍스트를 반환합니다.

이제 처음부터 현지화를 결정하여 모든 .strings 파일을 버리고 적절한 다중 언어 구조를 만들었습니다. 비어있는 Localizable.strings 파일로 시작하여 앱을 실행하여 모든 것을 올바르게 정리했는지 확인합니다. 비어있는 Localizable.string 파일을 사용하여 "NSLocalizedString"호출이 단순히 키를 텍스트로 반환한다고 가정했습니다. 그들은하지 않습니다. 그들은 여전히 ​​이전 .strings 파일에 있던 이전 텍스트를 반환합니다.

그냥 확인하는

, 나는 이와 같이, NSLocalizedString 호출 중 하나하에 NSLog 문을 넣어 :
NSString *text = NSLocalizedString(key, nil); 
NSLog(@"key=%@ text=%@", key, text); 

가 그럼 난 반환 된 텍스트 내 전체 하드 디스크를 검색 할 수 있습니다. 내 하드 디스크에는 NSLocalizedString이 반환하는 문자열이 없습니다. 그리고 그것은 키와 완전히 다른 문자열이므로 NSLocalizedString으로도 생성 할 수 없습니다.

어떻게 이런 일이 발생할 수 있는지 알고 있습니까? 이전 정보가 Xcode에 의해 어딘가에 캐시되어 있습니까? 새 Localizable.strings 파일을 사용하도록 도구를 설득하려면 어떻게해야합니까? 분명히, 나는 이미 'clean'ed하고 전체 프로젝트를 재건했다.

+2

기기에서 앱을 삭제하고 다시 실행 해보세요. 과거에는 삭제 된 리소스가 개발 중에 장치에서 삭제되지 않는다는 것을 알게되었습니다. –

답변

4

휴대 전화에서 앱을 삭제 한 다음 프로젝트를 정리하고 앱을 새로 설치하십시오.

그래도 작동하지 않으면 빌드 규칙 (Xcode 4 -> 대상 선택 -> 탭 "빌드 규칙")을 어찌할 지 엉망이 아닌지 확인하십시오. 많은 "CopyStringsFile"규칙은 "CopyStringsFile"을 사용하지 않습니다. 그렇다면 하나만 제외하고 모두 제거 할 수 있습니다.

+0

감사합니다. 장치 (내 경우에는 시뮬레이터)에서 응용 프로그램을 삭제하는 트릭을했다. – fishinear

+0

예, 시뮬레이터에서 앱을 삭제하면 제대로 작동합니다. – RocketMan

0

빌드 폴더도 정리 했습니까? command + option + shift + k 또는 제품으로 이동, 옵션을 누르면 클린 빌드 폴더가 생깁니다. 대개 리소스 파일이 캐시되고 리소스 파일 교체 (동일한 파일 이름이지만 다른 객체를 가진 파일)는 XCode에 의해 감지되지 않을 수 있습니다

또한 앱/재설정 시뮬레이터를 삭제하면 도움이됩니다. 삭제 된 파일은 재배포 할 때 언젠가 제거되지 않습니다.

+0

팁 주셔서 감사합니다, 그 가능성에 대해 몰랐습니다. 불행히도, 도움이되지 않았다 – fishinear

+0

실제로, 당신은 시뮬레이터/장치에서 응용 프로그램을 삭제하려고 했습니까? 도움이 될지도! –

0

시뮬레이터에서 테스트하는 경우 "iOS 시뮬레이터"응용 프로그램 메뉴의 "Reset Content and Settings ..."옵션을 사용하여 시뮬레이터를 재설정하십시오.

깨끗한 빌드 후에도 새 빌드를 다시 배포하면 이전에 빌드 된 버전의 캐시 된 콘텐츠가 지워지지 않는 경우가 있습니다.

관련 문제