Checking if a .nib or .xib file exists

后端 未结 3 1863
走了就别回头了
走了就别回头了 2020-12-14 07:03

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

3条回答
  •  情书的邮戳
    2020-12-14 07:33

    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)

提交回复
热议问题