1

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

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

如果用户没有在取景器中乱摸,这很好用。但他可以做几件事来欺骗我的应用程序。他可以打开一个查找器窗口,例如并选择一些文件。之后他可以点击桌面(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 ] ;

}
4

1 回答 1

-1

我想做什么,我想在最前面的窗口中选择项目,但我不知道我该怎么做。

问题是您偏离了既定的人机界面准则。您的用户在使用您的应用程序时会遇到与您编写应用程序一样多的困难。

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

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

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

于 2013-02-11T07:49:19.500 回答