0

サンドボックス化されたOSXアプリでNSSavePanelを使用して、ユーザーがデスクトップに保存できるようにすることはできますか?ダウンロードとユーザーが選択したフォルダーの読み取り/書き込み権限をユーザーに付与しました。何らかの理由で、アプリはダウンロードフォルダーに正常に保存されますが、ディレクトリを変更してデスクトップを選択すると、まったく保存されません。

これがNSSavePanelに使用しているコードです

if([self.mActiveQRFileName isEqualToString:kQR_DEFAULT_FILE_NAME])
    {
        NSSavePanel *savePanel = [NSSavePanel savePanel];
        //[savePanel setDirectoryURL:[NSURL URLWithString:[Utilities getQRDefaultDirectoryPath]]];
        [savePanel setNameFieldStringValue:kQR_DEFAULT_FILE_NAME];
        [savePanel beginSheetModalForWindow:[self window] completionHandler:^(NSInteger result) {
            if (result == NSFileHandlingPanelOKButton) {
                NSString *qrFilePath = [NSString stringWithFormat:@"%@.%@",[[savePanel URL] path],kQR_FILE_EXT];

                [qrd saveQRFile:qrFilePath];
                self.mActiveQRFileName = [NSString stringWithString:qrFilePath];
                blnChangesSaved = YES;
            }
        }];
    }
    else
    {
        [qrd saveQRFile:self.mActiveQRFileName];
        blnChangesSaved = YES;
    }

どんな助けでも大歓迎です:)

4

1 に答える 1

3

ANSSavePanelは、そのプロパティ内のファイルに対してユーザーが選択したパスを提供しますURL。サンドボックスは、ユーザーが指定した名前で、このファイルへのアクセスのみを許可します。

サンプルコードでは、この行は、選択したパスに別のファイル拡張子を付けることで、選択したパスを変更する可能性があります。

NSString *qrFilePath = [NSString stringWithFormat:@"%@.%@",[[savePanel URL] path],kQR_FILE_EXT];

これにより、サンドボックスでアクセスできない最初に選択されたファイルとは異なるファイル名になる可能性があります。をログに記録してqrFilePath、選択したURLのパスと同じかどうかを確認してください。また、サンドボックスの例外をチェックして、正確なエラーを確認してください。

NSSavePanelユーザーが特定のタイプのファイルのみを指定できるように制限する場合は、方法を使用しsetAllowedFileTypes:ます。

特定のパスではなく、任意のファイルを出力できるディレクトリへの書き込みアクセスをユーザーに許可する場合は、を使用しNSOpenPanelます。これには、ユーザーがのように特定のファイル名を指定できないという欠点がありますNSSavePanel

于 2013-01-12T14:46:06.973 に答える