Objective c 获得正确的查找器选择目标-C

Objective c 获得正确的查找器选择目标-C,objective-c,selection,finder,Objective C,Selection,Finder,我要求我的小项目的用户打开一个查找窗口并选择一个或多个对象。也允许选择“无”。在这种情况下,将使用所有项目 在我的应用程序中,我检查第一个窗口并尝试获取所选项目(文件或文件夹),请参见Code1 *请注意,有些变量是全局变量,在.h中声明,有些只是重置* 如果用户没有在finder中随意走动,那么这很好。但他可以做一些事情来欺骗我的应用程序。他可以打开查找窗口,例如选择一些文件。之后,他可以单击桌面(finder窗口中的选择仍然正确),然后直接在桌面上选择项目。当他返回到我的应用程序时,它会正确

我要求我的小项目的用户打开一个查找窗口并选择一个或多个对象。也允许选择“无”。在这种情况下,将使用所有项目

在我的应用程序中,我检查第一个窗口并尝试获取所选项目(文件或文件夹),请参见Code1
*请注意,有些变量是全局变量,在.h中声明,有些只是重置*

如果用户没有在finder中随意走动,那么这很好。但他可以做一些事情来欺骗我的应用程序。他可以打开查找窗口,例如选择一些文件。之后,他可以单击桌面(finder窗口中的选择仍然正确),然后直接在桌面上选择项目。当他返回到我的应用程序时,它会正确识别打开的窗口,但使用桌面上的项目作为所选项目,这不是我想要的。我想做的是,我想在最前面的窗口中显示所选的项目,但我不知道如何才能做到这一点

有什么线索吗

代码1

- (void)applicationWillBecomeActive:(NSNotification *)notification  {

   [self psProgressWrapper:FALSE :_spinningWheel :spinningWheelText ] ;

   NSUInteger *countArray = 0;
   asResult = @""; //this variable holds the path to the folder the frontmost window belongs to 

   selectionFlag = FALSE; //reset
   allFilesFlag  = FALSE; //reset

      //Get first finder window
    FinderApplication * finder = [SBApplication applicationWithBundleIdentifier:@"com.apple.finder" ] ;
    SBElementArray *windows = [finder FinderWindows ] ;

    if([windows count] >0) {
        FinderWindow *theWindow = [windows objectAtIndex:0 ] ;
        asResult = [theWindow name ] ;  //the name of the first window

         //setting a texfield in the GUI to text and color green
      [_errMessage setStringValue:asResult ] ;
      [_errMessage setTextColor: myGreenColor ] ;

      SBElementArray * selection = [[finder selection] get ] ;
      countArray = [selection count ] ;

      if(countArray == 0) {
         atFilesOriginal = (NSMutableArray*) [self checkForSelection:asResult :TRUE ] ;
      }
      else if(countArray > 0) {
         atFilesOriginal = (NSMutableArray*) [selection arrayByApplyingSelector:@selector(name) ] ;
      }
      else {
         asResult = @"NoWin";
      }
   }
   else {
      asResult = @"NoWin";
      [self checkFinderWindowType ] ;
   }

   [self refreshDRPopsWrapper] ;
   [self psProgressFlag:TRUE Wheel:_spinningWheel Text:spinningWheelText];

   [self goConvertBtnWrapper   ] ;
   [self checkFinderWindowType ] ;

}
我想做的是,在最前面的窗口中显示选定的项目 但是我不知道我怎么能做到

问题是您偏离了既定的人机界面准则。你的用户使用你的应用程序的困难程度与你编写应用程序的困难程度一样

如果要获取文件/文件夹选择,请使用NSOpenPanel

如果不需要模式窗口,则支持从文件系统拖放。或者使用NSBrowser帮助他们浏览和选择应用程序窗口中的文件


如果您真的想在Finder中操作,请创建Finder插件

嗯,我的应用程序是一个工具,它可以帮助用户在finder窗口中重命名文件或文件夹。我完全了解GUI指南,但在这种情况下,如果用户有一个包含2000个项目的文件夹,例如,并希望将所有出现的Suzana重命名为Suzi,则模式对话框将不会有很大帮助。我希望你明白我的意思。为你的特定用例添加了一个句子。>>为你的特定用例添加了一个句子,对不起,我不明白你的意思。您添加了什么?您可以在易于使用的查看器中查看此答案的历史记录。您也可以从“编辑”一词旁边的链接直接访问此查看器。此答案确实不可接受。我没有问你该怎么做。