Xcode 在搜索显示控制器中,仅搜索当前文件和文件夹,而不搜索iPad中的子文件夹和文件
我正在使用一个文件管理器应用程序,如果用户搜索关键字,那么在给定路径、文件名下可用的所有文件和文件夹都应该列在具有该搜索关键字的表视图中。搜索必须与在finder中搜索特定文件夹相同Xcode 在搜索显示控制器中,仅搜索当前文件和文件夹,而不搜索iPad中的子文件夹和文件,xcode,nsarray,nsfilemanager,nsenumerator,Xcode,Nsarray,Nsfilemanager,Nsenumerator,我正在使用一个文件管理器应用程序,如果用户搜索关键字,那么在给定路径、文件名下可用的所有文件和文件夹都应该列在具有该搜索关键字的表视图中。搜索必须与在finder中搜索特定文件夹相同 - (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { [marrFiles removeAllO
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
[marrFiles removeAllObjects];
for (NSDictionary *tempDict in marrTmp)
{
NSString *tempStr = @"";
if ([tempDict valueForKey:@"Folder"])
{
tempStr = [tempDict valueForKey:@"Folder"];
}else{
tempStr = [tempDict valueForKey:@"File"];
}
if ([tempStr rangeOfString:searchString].location != NSNotFound) {
[marrFiles addObject:tempDict];
}
}
return YES;
}
问题是-
当我搜索任何关键字时,它只显示当前文件夹或表视图中的文件,但我也希望显示所有子文件夹的文件
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
[marrFiles removeAllObjects];
for (NSDictionary *tempDict in marrTmp)
{
NSString *tempStr = @"";
if ([tempDict valueForKey:@"Folder"])
{
tempStr = [tempDict valueForKey:@"Folder"];
}else{
tempStr = [tempDict valueForKey:@"File"];
}
if ([tempStr rangeOfString:searchString].location != NSNotFound) {
[marrFiles addObject:tempDict];
}
}
return YES;
}
例如LocalFolder
->> **folder1**
-->f1.txt
-->f2.png
-->folder11
->> **folder2**
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
[marrFiles removeAllObjects];
for (NSDictionary *tempDict in marrTmp)
{
NSString *tempStr = @"";
if ([tempDict valueForKey:@"Folder"])
{
tempStr = [tempDict valueForKey:@"Folder"];
}else{
tempStr = [tempDict valueForKey:@"File"];
}
if ([tempStr rangeOfString:searchString].location != NSNotFound) {
[marrFiles addObject:tempDict];
}
}
return YES;
}
在这种情况下,当您搜索某个内容时,它会显示当前文件夹/文件,如folder1和folder2。我还需要在子目录中查找。我不确定您是如何进行文件搜索的,但我假设您在从搜索目录获取路径时使用了
目录目录下的内容。使用目录路径的子路径
代替目录路径的内容
,它将重新运行包含的所有子目录的路径
NSArray * contents = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath: searchPath error:nil];
// Now make your search.
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
[marrFiles removeAllObjects];
for (NSDictionary *tempDict in marrTmp)
{
NSString *tempStr = @"";
if ([tempDict valueForKey:@"Folder"])
{
tempStr = [tempDict valueForKey:@"Folder"];
}else{
tempStr = [tempDict valueForKey:@"File"];
}
if ([tempStr rangeOfString:searchString].location != NSNotFound) {
[marrFiles addObject:tempDict];
}
}
return YES;
}
查看更多信息。谢谢。。。是的,我正在使用目录路径的内容
,现在,我在getfilesandfolder
的函数中使用目录路径的子路径
进行了检查。太神奇了。显示包含子文件夹和文件的路径。但问题是,当我搜索任何单词或字符时,包含的文件和文件夹都不会显示(结果未找到)。使用此子路径DirectoryAtPath
将显示具有子路径名称的所有文件和文件夹
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
[marrFiles removeAllObjects];
for (NSDictionary *tempDict in marrTmp)
{
NSString *tempStr = @"";
if ([tempDict valueForKey:@"Folder"])
{
tempStr = [tempDict valueForKey:@"Folder"];
}else{
tempStr = [tempDict valueForKey:@"File"];
}
if ([tempStr rangeOfString:searchString].location != NSNotFound) {
[marrFiles addObject:tempDict];
}
}
return YES;
}
请给我另一个解决方案,因为我没有得到确切的答案。我不知道从所有文件和文件夹中搜索字符时缺少了什么。缺少了什么?子路径的结果是否为零?您确定searchPath
正确吗?请更具体一点。Leftbar具有localfolder,其中包含所有文件,并显示在右侧的tableview上。Search funn搜索任何单词/字符,然后显示文件/文件夹。NSMutableArray*数组=[NSMutableArray arrayWithArray:[fileManager子路径目录AtPath:strTemp错误:nil];我正在用这个。现在,在tableview中显示所有文件和子文件夹(例如folder1、folder1/f1.txt)。是否可以不在tableview中显示包含子文件夹和子文件的所有文件和文件夹?但在搜索特定文件时,它应该会显示出来,并且应该从任何子文件夹中获取。知道吗?好的,我不确定我是否理解这一点,但我会尝试一下。如果要在一个目录中显示文件和文件夹而不显示其子目录内容,请使用contentsOfDirectoryAtPath
。如果要搜索一个目录及其子目录,请在搜索时使用subpathsOfDirectoryAtPath
。除此之外,如果不看你的项目,我真的帮不了你。