4

Xcodeを使用してiPhoneアプリを作成していますが、ディレクトリ構造は次のとおりです。

GFGGAME
  -gfggame.xcodeproj
  -Images
    --bagold
     ---bags_1.png
     ---bags_2.png
    --bagsnew
     ---bags_5.png
     ---bags_6.png

bagsoldフォルダとからすべての画像にアクセスしたいbagsnew。リソースパスとpngの述語フィルターを使用すると、すべてのpngファイルが得られます。フォルダにあるファイルだけにアクセスする方法はありますか?

4

4 に答える 4

3

私はあなたがおそらくこのNSBundle方法を使いたいと思うと思います:

+ (NSArray *)pathsForResourcesOfType:(NSString *)extension inDirectory:(NSString *)bundlePath

こちらのAPIドキュメントをご覧ください

拡張機能として渡し@".png"、必要なサブディレクトリに対してのみディレクトリパスを指定します(サブディレクトリごとに1つずつ、合計2回呼び出す必要がある場合があります。次に、パスの2番目の配列を最初の配列に追加します)。

こちらのStackOverflowに関する同様の質問をご覧ください

これを機能させるためにXcodeで何をする必要があるかについて、上記の回答(リンク)のポイントに注意してください。

于 2012-09-10T06:46:45.110 に答える
3

回答した他の人への回答から、フォルダとXcodeグループを混同しているように思えます。Xcodeグループは、デバイス上のフォルダーに対応していません。これらは、デバイスではなく、Xcodeプロジェクトを整理するためにのみ存在します。すべてのリソースは、フラットな階層でメインディレクトリバンドルに直接コピーされます。

フォルダをXcodeにドラッグしてプロジェクトに追加する場合は、[追加されたフォルダのグループを作成する]ではなく、[追加されたフォルダのフォルダ参照を作成する]を選択する必要があります。これにより、アプリケーションのビルド時にディレクトリレイアウトが保持されます。

于 2012-09-10T07:35:24.760 に答える
2

これを行う:

NSString *bundleRootpath = [[NSBundle mainBundle] bundlePath];
NSString *filePath = [bundleRootpath pathForResource:@"bags_1" ofType:@"png" inDirectory:@"Images/bagold"]
NSFileManager *fileMangr = [NSFileManager defaultManager];
NSArray *dirContents = [fileMangr contentsOfDirectoryAtPath:bundleRootpath error:nil]; //your path here it may be document directory also

JPGがある場合はフィルタリング

NSArray *onlyJPGs;
if([dirContents count] > 0){
NSPredicate *fltrJPG = [NSPredicate predicateWithFormat:@"self ENDSWITH '.jpg'"];
onlyJPGs = [dirContents filteredArrayUsingPredicate:fltrJPG];
}

今ならPNG

NSArray *onlyPNGs;
if([dirContents count] > 0){
NSPredicate *fltrPNG = [NSPredicate predicateWithFormat:@"self ENDSWITH '.png'"];
onlyPNGs = [dirContents filteredArrayUsingPredicate:fltrPNG];

他の形式がある場合は検索します

onlyJPGsとonlyPNGsを1つの配列にマージします

于 2012-09-10T07:06:07.637 に答える
1

バラエティのためだけに:)

   NSMutableArray *filePaths = [NSMutableArray arrayWithArray:[NSBundle pathsForResourcesOfType:nil inDirectory:fullPathToFolder]];
    NSMutableArray *toDelete = [NSMutableArray array];
    if(filePaths.count>0){
        [filePaths enumerateObjectsUsingBlock:^(NSString* obj, NSUInteger idx, BOOL *stop) {
            if(!([obj hasSuffix:@"jpg"] || [obj hasSuffix:@"png"])){
                    [toDelete addObject:obj];
            }
        }];
    }
    [filePaths removeObjectsInArray:toDelete];
    return filePaths;
于 2014-05-29T11:40:03.033 に答える