initWithNibName:bundle:
または同様のものを使用してロードする前に、NibまたはXibファイルが存在するかどうかを確認する最良の方法は何ですか?
質問する
10895 次
3 に答える
68
大きい
#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"])
.xib
ロードaまたはを試す前に呼び出すことができるマクロのセットを次に示します.nib
。これらは、欠落しているファイルを識別し、正確に欠落しているものについての有用なメッセージを吐き出すのに役立ちます。
ソリューション
Objective-C:
if([[NSBundle mainBundle] pathForResource:fileName ofType:@"nib"] != nil)
{
//file found
...
}
ドキュメントofType:
には、ファイルの拡張子を指定する必要があることに注意してください。ただし、.xibを使用している場合でも、 `@" nib "を渡す必要があります。そうしないと、偽陰性になります。
Swift:
guard Bundle.main.path(forResource: "FileName", ofType: "nib") != nil else {
...
}
(参照:toutiの元の回答:https ://stackoverflow.com/a/55919888/89035 )
于 2009-05-31T13:06:25.340 に答える
3
迅速な解決策:
guard Bundle.main.path(forResource: "FileName", ofType: "nib") != nil else {
...
}
于 2019-04-30T11:25:41.587 に答える
0
私がここで見る2つの解決策があります。
initWithNibName:bundle:を呼び出すだけで、失敗した場合に例外をキャッチできます(このアイデアが気に入っているので、堅牢だと感じます)。おそらく、例外が「メモリ不足」の例外ではなく、実際には「ファイルが見つかりません」の例外であることを確認する必要があります。
または、NSBundleのpathForResource:ofType:を使用して、最初にnibの存在を確認することもできます。これは、存在しないファイルに対してnilを返します。
于 2009-05-28T23:41:23.070 に答える