2016-07-26 16 views
5

Ich mache eine App, die ein Framework verwendet, das ich erstelle.Wie überprüft man, ob ein Storyboard in einem bestimmten NSBundle existiert

Das Framework enthält Storyboards, aber in einigen Fällen muss das Projekt, das das Framework verwendet, das Storyboard überschreiben, indem ein neues bereitgestellt wird.

Also mein Ziel ist es zu überprüfen, ob ein Storyboard mit einem bestimmten Namen in [NSBundle mainBundle] existiert, wenn nicht, dann werde ich die Basisversion von meinem Framework bekommen.

Ich habe versucht, das Storyboard aus dem Hauptbündel zu bekommen und nach dem Ergebnis zu suchen, das Null ist, aber es wirft eine Ausnahme, wenn es es nicht finden kann. Also habe ich dann versucht, die Ausnahme zu fangen und dann das Storyboard aus dem Framework zu laden. Diese funktioniert funktioniert aber es fühlt sich schmutzig an und es könnte die Leistung meiner App gut treffen.

ich auch pathForResource im Bündel versucht:

if([[NSBundle mainBundle] pathForResource:name ofType:@"storyboard"] != nil) { 

} 

Aber das findet nie das Storyboard.

Kennt jemand anderer Weise, dass ich prüfen kann, ob ein Storyboard in einem bestimmten Paket existiert?

+0

Da Sie nicht in das Anwendungspaket zur Laufzeit schreiben Sie sollen genau wissen, was in dem Bündel bei der Kompilierung ... – vadian

+0

Der Code ist im Framework. Also kann ich nicht anhand des Frameworks sagen, in welchem ​​Hauptpaket es eingebettet ist. – Swinny89

+0

Ich weiß nicht, ob es helfen wird, aber ein kompiliertes Storyboard hat eine Dateierweiterung von "Storyboardc". –

Antwort

7

Also, ich war fast da, mit dem, was ich bereits versuchte. Laut einem Kommentar zu meiner Frage ist die kompilierte Erweiterung für ein Storyboard "Storyboardc". So kann ich überprüfen, ob ein Storyboard in einem Bündel vorhanden ist etwa so:

if([[NSBundle mainBundle] pathForResource:name ofType:@"storyboardc"] != nil) { 
    //The storyboard exists 
} else { 
    //The storyboard isn't in the bundle, get it from the framework bundle. 
} 
+1

Das "c" in Storyboardc ist wichtig, da wir nach der Compiler-Storyboard-Datei suchen! –

+0

@MatthieuRiegler, @ Swinny89 Wissen Sie, ob die Verwendung von "Storyboardc" ein Ablehnungsgrund für den AppStore ist? – eMdOS

+0

Es ist keine Verwendung einer privaten API so, nein. –