Я новичок в Typhoon и не могу понять, как правильно загрузить мою конфигурацию Configuration.plist. Мой проект моделируется после примера Swift PocketForecast, хотя я начал с моего собственного проекта на основе CocoaPods и сам добавил к нему Typhoon (т. Е. Я не начинал с клонированного проекта PocketForecast). Я использую интеграцию plist с несколькими сборками.TyphoonConfig пытается загрузить plist с неправильным путём пути
Когда я использую это:
public dynamic func config() -> AnyObject {
return TyphoonDefinition.configDefinitionWithName("Configuration.plist")
}
Я получаю файл не найдена ошибка и в отладчике я вижу путь его, используя это «/path/to/MyProject.app/Frameworks/Typhoon.framework », но, конечно, мой конфигурационный файл там не находится, он находится в« /path/to/MyProject.app/Configuration.plist ». Да, я подтвердил, что файл на самом деле там.
Я попытался решить эту проблему, делая что-то вроде этого:
public dynamic func config() -> AnyObject {
return TyphoonDefinition.withClass(TyphoonConfigPostProcessor.self) {
(definition) in
definition.injectMethod("useResourceAtPath:") {
(method) in
method.injectParameterWith(self.configURL())
}
}
}
public dynamic func configURL() -> AnyObject {
return TyphoonDefinition.withFactory(self.configBundle(), selector: "URLForResource:withExtension:", parameters: {
(initializer) in
initializer.injectParameterWith("Configuration")
initializer.injectParameterWith("plist")
})
}
public dynamic func configBundle() -> AnyObject {
return TyphoonDefinition.withClass(NSBundle.self) {
(definition) in
definition.useInitializer("mainBundle")
}
}
И как ни странно, это работает - иногда. Он кажется случайным и основан на том, что мои другие сборки Typhoon загружены. Другими словами, иногда все работает отлично, но в других случаях инициализация Typhoon запускает множество различных ошибок, таких как «Нет компонента, соответствующий идентификатору XYZ» или «не может найти значение в конфигурации». Но, как я уже сказал, иногда это работает отлично.
Должно быть, мне не хватает фундаментальной части того, как инициализируется тайфун, поэтому любая помощь очень ценится!
Редактировать: Итак, после того, как некоторые из них выглядят так, будто первый метод, который я пробовал выше, терпит неудачу из-за проблемы с CocoaPods, использующей фреймворк вместо статической библиотеки для проектов Swift? Я нашел этот код в TyphoonResource:
+ (id <TyphoonResource>)withName:(NSString *)name
{
return [self withName:name inBundle:[NSBundle bundleForClass:[self class]]];
}
И так [self class]
разрешим к классу в рамках тайфуна, я думаю, я понимаю, почему это расслоение это расслоение он использует, но похоже, ошибка мне. Я посмотрю, смогу ли я понять, почему это не нарушает приложение PocketForecast.
Да, похоже, что вы нашли ошибку. Я думаю, что мы используем '[self class]' там, потому что он использовался для старых тестов логики. , , было бы безопасно (AFAIK) изменить это на '[NSBundle mainBundle]'. Давайте попробуем это. Я буду нажимать на главную ветку, и вы можете 'pod 'Typhoon',: head' –
https://github.com/appsquickly/Typhoon/issues/329 –
Замена с помощью' [NSBundle mainBundle] 'работала для меня. Разрушил ли он другие вещи? – StephenP