9

文字列に特定のサフィックスが付いているかどうかを確認したいのですが、大文字と小文字を区別しないチェックを行いたいと思います。これに代わるものが必要です:

if ([selectedFile hasSuffix:@"jpg"] ||
    [selectedFile hasSuffix:@"JPG"]) 

またはjPg、jpG、Jpg。これを行うための短い方法はありますか?caseInsensitiveCompare:この状況でどのように適用できるかわかりません。

4

3 に答える 3

15
[[selectedFile lowercaseString] hasSuffix:@"jpg"]
于 2012-08-20T20:15:35.777 に答える
15

がファイル名の場合selectedFileは、拡張子全体を確認することをお勧めします。ThisIsNotAnImage.asdfjpgという名前のファイルが見つかる可能性は低いですが、可能性があります。接尾辞を確認するだけで、これは画像であると誤って結論付けられます。

幸いなことNSStringに、パスを操作するための多くの方法がありますpathExtension

また、常にJPEG画像のみを受け入れますか、それともロードできるすべての画像を受け入れますか?Appleの画像クラスのほとんどは、印象的な範囲のファイル形式をサポートしています。

iOS向けに作成している場合、によって認識される画像形式は、その拡張子とともにUIImageクラスリファレンスUIImageに一覧表示されます。

Mac OS用に作成している場合はNSImage、と呼ばれるクラスメソッドがimageFileTypesあり、サポートされている形式を実行時に変更できます。

UIImageクラスリファレンスに記載されているように、JPEGファイルの拡張子は.jpegである場合があります。手動でJPEGを探している場合は、.jpg.jpegの両方を確認する必要があります。

JPEGのみのテスト

NSString *extension = [selectedFile pathExtension];
BOOL isJpegImage = 
    (([extension caseInsensitiveCompare:@"jpg"] == NSOrderedSame) || 
     ([extension caseInsensitiveCompare:@"jpeg"] == NSOrderedSame));

if (isJpegImage)
{
    // Do image things here.
}

UIImageがロードできるすべてのものをテストする

NSString *loweredExtension = [[selectedFile pathExtension] lowercaseString];
// Valid extensions may change.  Check the UIImage class reference for the most up to date list.
NSSet *validImageExtensions = [NSSet setWithObjects:@"tif", @"tiff", @"jpg", @"jpeg", @"gif", @"png", @"bmp", @"bmpf", @"ico", @"cur", @"xbm", nil];
if ([validImageExtensions containsObject:loweredExtension])
{
    // Do image things here.
}

NSImageがロードできるすべてのものをテストする

NSString *loweredExtension = [[selectedFile pathExtension] lowercaseString];
NSSet *validImageExtensions = [NSSet setWithArray:[NSImage imageFileTypes]];
if ([validImageExtensions containsObject:loweredExtension])
{
    // Do image things here.
}
于 2012-08-21T05:32:40.427 に答える
2

mipadiの提案が最適ですが、あなたが言及したのでcaseInsensitiveCompare:、これはあなたがそれをどのように使用するかです:

BOOL hasSuffix = (NSOrderedSame == [[selectedFile substringFromIndex:[selectedFile length] - 3]] caseInsensitiveCompare:@"JPG"]);

それは一口です!

rangeOfString:options:接尾辞とを渡して、を使用することもできますNSCaseInsensitiveSearch

于 2012-08-20T20:25:39.183 に答える