2

だから私は現在、ディレクトリを取得するためのこのビットのコードを持っています:

-(NSString *)get {      
  NSOpenPanel *gitDir = [NSOpenPanel openPanel];
  NSInteger *ger = [gitDir runModalForTypes:nil];
  NSString *Directory = [gitDir directory];
  return Directory;
}

しかし、それは私にエラーを与え、現在は減価償却されていると言います。

OSX 10.7のより良い方法はありますか?

4

3 に答える 3

6

これは、sosbornの答えを補足するものであり、代替品ではありません。

runModalForTypes:は非推奨であり、正しい置換はですrunModal(または、setAllowedFileTypes:その後に続きrunModalますが、この場合、型にnilを渡します)。

directoryも非推奨であり、正しい置換はdirectoryURLです。(実際に、NSStringではなくパスを返す必要がある場合はNSURL、単に返し[[gitDir directoryURL] path]ます。)

ただし、実際に必要なのはユーザーにディレクトリの選択を求めることである場合、ユーザーにファイルの選択を求め、次にそのファイルが含まれるディレクトリを返すことです。これを行うには、とを呼び出してsetCanChooseFilesから、URLを呼び出して、ユーザーが選択したディレクトリを取得します。NOsetCanChooseDirectoriesYES

runModalまた、 (またはrunModalForTypes:)の結果を無視しています。コンパイラは未使用の変数「ger」について警告していると確信しています。警告を無視するだけではいけません。ユーザーがパネルをキャンセルした場合は、[OK]をクリックしたものとして扱い、キャンセルしたときにたまたま入っていたディレクトリを選択します。

これは、選択したディレクトリのURLを返す、またはユーザーがキャンセルした場合(またはなんとかして何も選択しなかった場合)はnilを返す、より良い実装です。繰り返しますが、が必要な場合はNSString、returnステートメントに「path」呼び出しを追加するだけです。

-(NSURL *)get {      
   NSOpenPanel *panel = [NSOpenPanel openPanel];
   [panel setAllowsMultipleSelection:NO];
   [panel setCanChooseDirectories:YES];
   [panel setCanChooseFiles:NO];
   if ([panel runModal] != NSModalResponseOK) return nil;
   return [[panel URLs] lastObject];
}
于 2012-06-06T21:28:21.253 に答える
6

非推奨の警告が表示されたときはいつでも、公式ドキュメントに直接アクセスする必要があります。この場合、NSOpenPanel のドキュメントには次のように書かれています。

runModalForTypes: パネルを表示し、ユーザーが [OK] または [キャンセル] をクリックすると終了するモーダル イベント ループを開始します。(Mac OS X v10.6 では廃止されました。代わりに runModal を使用してください。setAllowedFileTypes: を使用して fileTypes を設定できます。)

于 2012-06-06T00:49:38.553 に答える
2

abarnert によるコードを迅速に適合させました。私が必要としていたコードのtx。

func askUserForDirectory() -> NSURL? {
        let myPanel:NSOpenPanel = NSOpenPanel()
        myPanel.allowsMultipleSelection = false
        myPanel.canChooseDirectories = true
        myPanel.canChooseFiles = false
        if ( myPanel.runModal() != NSFileHandlingPanelOKButton ) {
            return nil
        }
        return myPanel.URLs[0] as? NSURL
    }
于 2015-01-29T19:24:59.093 に答える