Большинство моделей в приложении iOS запрашивают веб-сервер. Я хотел бы иметь файл конфигурации, хранящий базовый URL-адрес сервера. Это будет выглядеть примерно так:Где хранить глобальные константы в приложении iOS?
// production
// static NSString* const baseUrl = "http://website.com/"
// testing
static NSString* const baseUrl = "http://192.168.0.123/"
комментируя одну линию или другой, я могу мгновенно изменить, какой сервер мои модели указывают. Мой вопрос: какова наилучшая практика хранения глобальных констант в iOS? В Android-программировании у нас есть этот встроенный strings resource file. В любом Activity (эквивалент UIViewController), мы можем получить эти строковые константы с:
String string = this.getString(R.string.someConstant);
мне было интересно, если IOS SDK имеет аналогичное место для хранения констант. Если нет, то в чем заключается наилучшая практика в Objective-C?
Я использую '' constants.h'' подход, объявляя 'static' переменные на основе' #ifdef VIEW_CONSTANTS ... # endif'.Таким образом, у меня есть один файл констант, основанный на приложении, но каждый из моих других файлов кода '# define' содержит разные наборы констант для включения до' # include'-файла констант (останавливает все эти «определенные, но не используемые» предупреждения компилятора). – darvids0n
Есть два вопроса, с которыми я столкнулся с этим решением. Во-первых, когда я использовал '# decalare', я получил ошибку компиляции, указав« недопустимая директива preprocessing declare * ». Поэтому я заменил его на '# define'. Другая проблема заключается в использовании константы. Я хотел создать другую константу со статическим NSString * const fullUrl = [NSString stringWithFormat: @ "% @% @", kbaseUrl, @ "script.php"] ', но, видимо, было запрещено создавать константы с выражением. Я получаю ошибку "* элемент инициализации не является константой *". – JoJo
Действительно, это '# define', а не' # declare'. Моя ошибка, я исправляю свой ответ. Однако странно, что вы получаете эту ошибку. Это связано с 'static NSString * const fullURL' частью, а не с константой (это макрос препроцессора, так что это как если бы вы написали' ... @ "% @% @", @ "something" , @ "script.php" '). BTW вместо использования 'stringWithFormat' вы могли бы просто написать' [kBaseUrl stringByAppendingString: @ "script.php"] ', что занимает меньше времени (нет необходимости разбирать строку формата). – Cyrille