używam NSLocalizedString
w konkretnym komunikatem, który działa dobrze, jeśli drugi parametr jest przekazywana jako zmienna, ale nie z Use of undeclared identifier 'NSLocalizedString'
i Too many arguments provided to function-like macro invocation
Jeśli drugi parametr jest napisane dokładnie taka sama jak zmiennej było ustawione. Mam działający kod przy użyciu zmiennej, co jest w porządku, chcę po prostu zrozumieć powody nieumiejętności uniknięcia tego w innych sytuacjach.NSLocalizedString - Wykorzystanie nierejestrowanej identyfikatora emisji
z następujących deklaracji:
NSString *branchTitle = [branchDictionary objectForKey:@"Title"];
NSString *localString = [NSMutableString stringWithFormat:@"%@ node title", branchTitle];
Działa to dobrze, bez błędów:
[navItem setTitle:NSLocalizedString(branchTitle, localString)];
... ale to, co wydaje się identyczny do mnie, nie z błędów wymienionych powyżej:
[navItem setTitle:NSLocalizedString(branchTitle, [NSMutableString stringWithFormat:@"%@ node title", branchTitle])];
Wyszukiwanie tutaj i gdzie indziej Nie znalazłem wyjaśnienia. Przeczytałem kilka trafień w każdym komunikacie o błędzie i różnych problemach z NSLocalizedString
, ale nic, co wiązało je ze sobą. To, co znalazłem w drugim komunikacie o błędzie, mogło być spowodowane problemem z klangiem i liczbą przecinków w komunikacie, co oznacza, że mimo że dodatkowy przecinek znajduje się w komunikacie NSMutableString
, nadal był postrzegany jako dodatkowy parametr przez NSLocalizedString
. Czy to ma jakiś sens?
Nie ma znaczenia dla pytania, ale oświadczenie ma na celu ustawienie zlokalizowanej wersji tytułu paska nawigacji na podstawie wersji angielskiej wyciągniętej ze słownika, który różni się dla różnych widoków. Część NSMutableString
definiuje komentarz do lokalizacji na podstawie tytułu angielskiego.
EDYCJA: Po rozwiązaniu tego problemu na podstawie zaakceptowanej odpowiedzi poniżej zauważyłem inny powiązany problem. Deklaracja z localString
wygenerowała ostrzeżenie kompilatora "Unused variable"
, chociaż wyraźnie było używane. Jest to również spowodowane tym, że jest w makrze C i dla kompletności, dodaję link do odpowiedniego postu tutaj o tłumieniu tego ostrzeżenia: How can I get rid of an “unused variable” warning in Xcode
Przyjemnie, samo dodanie zestawu nawiasów naprawia to. NSLocalizedString to pierwsze makro C, które świadomie używałem w Objective-C, więc jest to dobra wskazówka, o której należy pamiętać, gdy inni się kręcą. Dzięki! –
cieszę się, że pomogłem! – sergio