Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
639 views
in Technique[技术] by (71.8m points)

iphone - Checking if a .nib or .xib file exists

What's the best way to check if a Nib or Xib file exists before trying to load it using initWithNibName:bundle: or similar?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Macro

#define AssertFileExists(path) NSAssert([[NSFileManager defaultManager] fileExistsAtPath:path], @"Cannot find the file: %@", path)
#define AssertNibExists(file_name_string) AssertFileExists([[NSBundle mainBundle] pathForResource:file_name_string ofType:@"nib"])

Here are a set of macros that you can call before you try an load a .xib or .nib, they will help identify missing files and spit out useful message about what exactly is missing.

Solutions

Objective-C:

if([[NSBundle mainBundle] pathForResource:fileName ofType:@"nib"] != nil) 
{
    //file found
    ...
}

Please note, the documentation states that ofType: should be the extension of the file. However even if you are using .xib you need to pass `@"nib" or you will get a false-negative.

Swift:

guard Bundle.main.path(forResource: "FileName", ofType: "nib") != nil else {
       ...
    }

(See: touti's original answer: https://stackoverflow.com/a/55919888/89035)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...