Путь к набору рамок iOS
Я работаю над фреймворком для iOS, который поставляется с некоторыми файлами данных. Чтобы загрузить их в Dictionary
я делаю что-то вроде этого:
public func loadPListFromBundle(filename: String, type: String) -> [String : AnyObject]? {
guard
let bundle = Bundle(for: "com.myframework")
let path = bundle.main.path(forResource: filename, ofType: type),
let plistDict = NSDictionary(contentsOfFile: path) as? [String : AnyObject]
else {
print("plist not found")
return nil
}
return plistDict
}
Если я использую это на игровой площадке с каркасом, он работает по назначению.
Но если я использую фреймворк, встроенный в приложение, он больше не работает, "путь" теперь указывает на пакет приложения, а не на фреймворк.
Как я могу убедиться, что доступ к пакету структуры?
EDIT: код выше находится в рамках, а не в приложении.
EDIT2: приведенный выше код является функцией утилиты и не является частью структуры или класса.
Ответы
Ответ 1
Используйте Bundle(for:Type)
:
let bundle = Bundle(for: type(of: self))
let path = bundle.path(forResource: filename, ofType: type)
Обновить:
или поиск пакета по identifier
(identifier
пакета frameworks):
let bundle = Bundle(identifier: "com.myframework")
Ответ 2
Попробуйте ввести код, чтобы получить пользовательский комплект:
let bundlePath = Bundle.main.path(forResource: "CustomBunlde", ofType: "bundle")
let resourceBundle = Bundle.init(path: bundlePath!)
Обновить
Если в ваших рамках, попробуйте следующее:
[[NSBundle bundleForClass:[YourClass class]] URLForResource:@"YourResourceName" withExtension:@".suffixName"];
Ответ 3
Просто укажите имя класса ресурса, и функция ниже предоставит вам объект Bundle, с которым связан класс, поэтому, если класс связан с каркасом, он даст связку каркаса.
let bundle = Bundle(for: <YourClassName>.self)