Le chargement d'une ressource (par exemple, storyboard) dans un cadre Swift
Je suis en train de faire un cadre qui permettra de regrouper un storyboard. J'ai vérifié, et le créé .cadre comprend mon .storyboard de fichier (comme un .storyboardc
fichier), et ont obtenu le cadre de charger la table de montage séquentiel au moment de l'exécution. Toutefois, ce cadre, j'aimerais que le code pour être aussi polyvalent que possible, et j'ai l'impression que ma solution actuelle est un peu hacky. Actuellement, je suis le chargement de la table de montage séquentiel en utilisant le code suivant:
let mainBundlePath: String = NSBundle.mainBundle().resourcePath
let frameworkBundlePath = mainBundlePath.stringByAppendingPathComponent("Frameworks/AuthenticationManager.framework")
let frameworkBundle = NSBundle(path: frameworkBundlePath)
let storyboard = UIStoryboard(name: "Storyboard", bundle: frameworkBundle)
Un couple de choses que j'ai remarqué qui pourrait être de pièges:
- Le chemin du cadre (
Frameworks/
) pourrait, potentiellement, de changer à l'avenir, et ne doit pas invoqué? - Le nom du cadre pourrait changer, mais sans d'abord obtenir le
NSBundle
du cadre, il n'y a pas moyen d'obtenir le nom du produit? - Cadres ne sont pas vraiment des faisceaux (?), afin de les charger dans un bundle pourrait avoir des conséquences imprévues dans l'avenir?
Il y a peut être d'autres problèmes, solutions aux problèmes ci-dessus, ou les questions ci-dessus peuvent ne pas être les problèmes, après tout, mais je n'ai pas été en mesure de penser à eux.
Cette question peut être plus adapté pour L'Examen Du Code, mais j'ai senti qu'il avait sa place dans ici, trop. S'il doit être déplacé au-dessus, n'hésitez pas à le faire ou me dire de le faire.
- Bonjour, je sais que ce sujet a 4 ans.. je veux faire à peu près la même chose, mais je ne trouve aucun tutoriel ou bon exemple afin que je puisse apprendre de lui. Pouvez-vous (ou quelqu'un d'autre) m'aider s'il vous plaît ? juste en me donnant des conseils ou des liens .. Merci beaucoup
Vous devez vous connecter pour publier un commentaire.
Voici une solution plus propre (pas de cadre identifiants concernés):
Si ce code n'est pas à l'intérieur d'un
static
méthode, l'utilisationYourClass.self
au lieu deself
.Exemple pour Swift 3:
self
est assez. J'ai ajouté une petite note pour rendre les choses plus claires. Merci!YourClass.self
avec une classe du cadre, ne pourriez-vous pas?Un cadre (créé à partir de la "Cocoa Touch Cadre de modèle") est un identifiant de lot,
qui est stocké dans l'Info.plist de l'généré cadre bundle.
L'identifiant de lot est configuré en général, les paramètres de la cible.
Par défaut, il est
<organization prefix>.<framework name>
.Vous pouvez trouver le cadre à l'aide de cet identifiant, par exemple:
Pour Swift 3/4, il est maintenant tout simplement Bundle :
C'est une bien meilleure façon de charger le paquet dans Swift 3, sans la nécessité de passer d'une chaîne de caractères qui est beaucoup plus susceptible d'échouer