Cóż, istnieje kilka problemów tutaj.
Pierwszy (a nie ten, o który pytałeś) polega na tym, że przydzielasz nowy NSMutableString, a następnie po prostu wyrzucasz go w drugim wierszu, gdy ustawisz go na someTextFieldIbOutlet.text. Przerzucasz też niezmienny łańcuch na zmienny, który nie zadziała. Zamiast łączyć dwie pierwsze linie tak:
NSMutableString* mStr = [NSMutableString stringWithString:someTextFieldIbOutlet.text];
Rzeczywisty błąd, że są coraz to spowodowane tym, że pierwszy argument do NSLog ma być „format” string który mówi NSLog jak chcesz sformatować dane następujące w późniejszych argumentach. Powinien to być ciąg literalny (utworzony tak, jak @"this is a literal string"
), aby nie można było wykorzystać go do wykorzystania programu, wprowadzając w nim zmiany.
Zamiast korzystać z tego:
NSLog(@"%@", mStr);
W tym przypadku, łańcuch format jest @"%@"
co oznacza "Utwórz NSString
obiekt ustawiony %@
". %@
oznacza, że następnym argumentem jest obiekt, a zastąpienie %@
opisem obiektu (w tym przypadku jest to wartość ciągu).
Błędy formatowe powstają, ponieważ konwencje przekazywania argumentów C nie są bezpieczne dla typu. –