2016-07-26 6 views
5

내가 만드는 프레임 워크를 사용하는 앱을 만들고 있습니다.특정 NSBundle에 스토리 보드가 있는지 확인하는 방법

프레임 워크에는 스토리 보드가 포함되어 있지만 프레임 워크를 사용하는 프로젝트는 새로운 것을 제공하여 스토리 보드를 재정의해야합니다.

내 목표는 특정 이름의 스토리 보드가 [NSBundle mainBundle]에 있는지 확인하는 것입니다. 그렇다면 내 프레임 워크에서 기본 버전을 가져옵니다.

메인 번들에서 스토리 보드를 가져 와서 결과가 무효인지 확인하려고했지만 찾지 못하면 예외가 발생합니다. 그래서 예외를 잡아 내고 프레임 워크에서 스토리 보드를로드하려고했습니다. 이 에서 작동하지만 더러워졌고 내 앱 성능에 크게 영향을 줄 수 있습니다. 나는 또한 번들 pathForResource 시도

:

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

} 

는하지만이 스토리 보드를 발견하지 못했다.

특정 번들에 스토리 보드가 있는지 다른 방법으로 확인할 수 있습니까?

+0

당신은 – vadian

+0

... 정확히 컴파일시에 번들로 알고 가정된다 코드가 프레임 워크에 있습니다. 그래서 프레임 워크에서 무엇이 기본 번들에 포함되어 있는지 알 수는 없습니다. – Swinny89

+0

도움이 될지 모르겠지만 컴파일 된 스토리 보드의 파일 확장자는 "storyboardc"입니다. –

답변

7

그래서 나는 이미 내가 시도한 것과 거의 같았습니다. 내 질문에 대한 의견에 따라, 스토리 보드에 대한 컴파일 된 확장은 "storyboardc"입니다. 그래서 스토리 보드 그래서 같은 번들 존재 여부를 확인할 수 있습니다 : 당신은 런타임에 응용 프로그램 번들로 쓸 수 있기 때문에

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

"storyboardc"의 "c"는 컴파일러 스토리 보드 파일을 찾기 때문에 중요합니다! –

+0

@MatthieuRiegler, @ Swinny89'storyboardc'의 사용법이 AppStore의 거부 이유인지 아십니까? – eMdOS

+0

개인 API를 사용하지 않으므로 아니요. –

관련 문제