sto usando NSLocalizedString
in un particolare messaggio che funziona bene se il secondo parametro viene passato come una variabile, ma non riesce con Use of undeclared identifier 'NSLocalizedString'
e Too many arguments provided to function-like macro invocation
se il secondo parametro è scritto esattamente come la variabile era stabilito. Ho un codice funzionante usando la variabile, che va bene, voglio solo capire i motivi per cui non so come evitarlo in altre situazioni.NSLocalizedString - Utilizzo di non dichiarato questione identificatore
Con le seguenti dichiarazioni:
NSString *branchTitle = [branchDictionary objectForKey:@"Title"];
NSString *localString = [NSMutableString stringWithFormat:@"%@ node title", branchTitle];
Questo funziona bene senza gli errori:
[navItem setTitle:NSLocalizedString(branchTitle, localString)];
... ma questo, che sembra identico a me, non riesce con gli errori sopra indicati:
[navItem setTitle:NSLocalizedString(branchTitle, [NSMutableString stringWithFormat:@"%@ node title", branchTitle])];
Cercare qui e altrove Non ho trovato una spiegazione. Ho letto un numero di accessi su ogni messaggio di errore e vari problemi NSLocalizedString
, ma nulla che li legasse insieme. Quello che ho trovato sul secondo messaggio di errore implicava forse un problema con clang e il numero di virgole nella dichiarazione, che indicava che anche se la virgola extra era all'interno del messaggio NSMutableString
, veniva ancora vista come un parametro aggiuntivo entro il NSLocalizedString
. Ha senso?
Non importante per la domanda, ma l'istruzione è intesa per impostare la versione localizzata di un titolo della barra di navigazione in base alla versione inglese estratta da un dizionario, che varia a seconda delle viste. La parte NSMutableString
definisce il commento per la localizzazione in base al titolo inglese.
MODIFICA: dopo aver risolto questo problema per la risposta accettata, di seguito, ho notato un altro problema correlato. La dichiarazione di localString
stava producendo un avviso del compilatore "Unused variable"
, sebbene fosse chiaramente utilizzato. Ciò è dovuto anche al fatto che si trova all'interno di una macro C e per completezza, sto aggiungendo un collegamento a un post pertinente qui sulla soppressione di tale avviso: How can I get rid of an “unused variable” warning in Xcode
Bello, basta aggiungere un set di parentesi per risolverlo. NSLocalizedString è la prima macro C che ho usato consapevolmente all'interno di Objective-C, quindi è un buon consiglio da tenere a mente quando gli altri girano intorno. Grazie! –
felice di aver aiutato! – sergio