Я бы взглянул на Watson Assistant и посмотрел на различные виды ответов , которые вы можете реализовать.
На изображении выше показано, как добавление ответа опции будет похоже на пример JSON, который вы опубликовали.
В некоторых случаях это может быть слишком много, но наличие инфраструктуры для обработки некоторых обходов диалоговых узлов весьма удобно.
При предположении, что для каждого приложения только была нужна одна кожа за один раз, и что Вы создаете несколько приложений с различными темами, я создал бы ответвление в своем управлении исходным кодом и затем заменил бы необходимые активы. Вы сохраняете основное ответвление со всеми активами по умолчанию, и затем Вы объединяете изменения кода от ведущего устройства в Ваши покрытые кожей ответвления, сохраняющие все в синхронизации.
Мерзавец делает это супер легким.
Один из способов сделать это - переместить все ваши иллюстрации в отдельный пакет и динамически загружать его во время выполнения (вроде как «медиа-плагин»).
Создайте отдельный проект и выберите «Mac OS X» / Framework и библиотека / Bundle. " Назовите его, скажем, media.bundle
.
Переместите все свои иллюстрации в этот проект.
Чтобы упростить жизнь, добавьте дополнительный шаг «Выполнить сценарий» к цели, копируя построенный вывод из каталог сборки во вложенную папку в основном проекте. Чтобы сделать это еще проще, добавьте медиа-пакет в качестве зависимого проекта в ваш основной проект, чтобы он автоматически перестраивался.
В вашем основном проекте вам понадобятся эти два метода. Вы можете сделать их статическими методами в классе BundleUtils
:
+ (NSString *) bundleDirectoryFor:(NSString *) bundleName
{
NSString* basePath = [[[NSBundle mainBundle] resourcePath]
stringByAppendingPathComponent:[NSString
stringWithFormat:@"%@.bundle", bundleName]];
return [[NSBundle bundleWithPath:basePath] resourcePath];
}
+ (NSString *) resourceInBundle:(NSString *)bundleName
fileName:(NSString *)fileName
{
NSString *bundlePath = [BundleUtils bundleDirectoryFor:bundleName];
return [bundlePath stringByAppendingPathComponent:fileName];
}
Теперь каждый раз, когда вы хотите получить доступ к иллюстрации в вашем пакете, вы можете получить путь к нужному файлу с помощью:
NSString* imageFile = [BundleUtils resourceInBundle:@"media.bundle"
fileName:@"image.jpg"];
UIImage* image = [UIImage imageNamed:imageFile];
Очевидно, что имя «media.bundle» может быть заменено во время выполнения на другое, чтобы вы могли переключиться на другие пакеты в зависимости от потребностей вашего приложения. Это также удобный способ поддержки загружаемого контента (скажем, в виде платных надстроек).
Одно предостережение: это предполагает, что вам необходимо динамически загружать изображения во время выполнения с помощью кода. Но у вас также есть статические файлы NIB, в которые встроены медиа. Вам нужно будет найти способ заставить статический файл NIB использовать динамические методы для разрешения имен файлов мультимедиа. Один из способов - использовать MethodSwizzling и отслеживать пути к файлам с префиксом типа, скажем, «media: image.png», и перенаправлять их для использования методов BundleUtil.
Я думаю, что лучший вариант - использовать что-то вроде git.
Если вы использовали git, у вас может быть основная ветвь, содержащая основной исходный код и логику, и дочерние ветки, которые иметь разные наборы данных / изображений для каждого конкретного варианта вашего приложения. В этом решении XCode даже не узнает, что происходит.
Я думаю, что viewDidLoad предназначен именно для этого, чтобы настроить больше, здесь вы можете изменить путь к изображениям.