これが私が達成したいことです。1. すべてのファイルを検索する 2. 検索中にすべての .jpg ファイルを見つける 3. すべての .jpg ファイル パスを NSMutableArray に保存する
コードは次のとおりです。
NSMutableArray を作成しました:
NSMutableArray *jpgFiles = [[[NSMutableArray alloc]init]autorelease];
(/Users/) パスの下にあるすべての親フォルダーを検索します (ここで NSThread を開始します)。
NSString* filePath = [url path]; NSArray *dirFiles = [[NSFileManager defaultManager]contentsOfDirectoryAtPath:filePath error:nil]; if([dirFiles count]!=0) { for (int j=0; j<[dirFiles count]; j++) { NSString* pathExtension = [[dirFiles objectAtIndex:j] pathExtension]; //if extension is null, we forwards to next level. if ([pathExtension isEqualTo:@""]) { @autoreleasepool { [NSThread detachNewThreadSelector:@selector(searchingPicture:) toTarget:self withObject:[filePath stringByAppendingPathComponent:[dirFiles objectAtIndex:j]]]; } } else { //if find jpg in this level, save into array if([pathExtension isEqualTo:@"JPG"]) { [jpgFiles addObject:[filePath stringByAppendingPathComponent:[dirFiles objectAtIndex:j]]]; } } } }
残りのサブフォルダーを検索し続け、適切なファイル パスを配列に保存します。
-(void)searchingPicture:(NSString*)path { NSFileManager *fileManager = [[[NSFileManager alloc] init] autorelease]; NSURL *directoryURL = [NSURL URLWithString:[path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; NSArray *keys = [NSArray arrayWithObject:NSURLIsDirectoryKey]; NSDirectoryEnumerator *enumerator = [fileManager enumeratorAtURL:directoryURL includingPropertiesForKeys:keys options:0 errorHandler:^(NSURL *url, NSError *error) { // Handle the error. // Return YES if the enumeration should continue after the error. return YES; }]; for (NSURL *url in enumerator) { NSError *error; NSNumber *isDirectory = nil; if (! [url getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:&error]) { // handle error } else if (! [isDirectory boolValue]) { // No error and it’s not a directory; do something with the file if([[[url path] pathExtension]isEqualTo:@"JPG"]) { //This line gives me error !!! [jpgFiles addObject:[url path]]; } } } }
エラー: (最初は問題なく動作し、多くの異なるファイルを配列に保存しますが、約 50 個のファイルを保存した後、エラーが発生し始め、最後にクラッシュします)。
配列に追加される正しい要素は次のとおりです。
/Users/NAME/Documents/Graduate Books/IMG_2517.JPG
エラーメッセージは次のとおりです。
-[NSPathStore2 addObject:]: unrecognized selector sent to instance 0x10011d4d0
ただし、このエラーが発生しても、一部のパスを配列に保存し続け、別のエラーをスローします。
An uncaught exception was raised
直し方教えていただけないでしょうか??ありがとう !!