Here’s a point I had to dig out while trying the “positional specifiers” from the “String Programming Guide”.

I was creating strings using “stringWithFormat” and needed to change a string being sent to a server and wanted to avoid changing code if possible.  But after many tries at changing parameters to things like “%2$@,  %3$@”, the result was not changing.

It turned out that for re-ordering to work, you must use all of the arguments supplied in the method call. I was trying to leave out argument 1 (on purpose) and that caused the order numbering to be ignored.

Since my result was XML,  I just put the unneeded string into an XML comment at the end of the result and that worked.

(I have not tried to find out what happens if I use an argument more than once.  But I have seen that giving less arguments than in the format string can make an app crash.)