Вернуть имя файла на этикетке? - PullRequest
1 голос
/ 28 июня 2011

Я работаю над инструментом шифрования, и у меня есть средство выбора файлов, в которое пользователь может перейти, чтобы выбрать файл для шифрования. Моя проблема довольно проста. После того, как пользователь нажимает кнопку «Выбрать» в окне выбора файлов, имя файла должно быть возвращено метке в приложении. Проблема в том, что я не могу войти в окно, которое содержит кнопку выбора для подключения к IBAction. Как я могу вернуть имя файла на этот ярлык после того, как пользователь нажмет выбор? Может кто-то, возможно, загрузить код, который будет делать это? Я сейчас как бы новичок, поэтому, пожалуйста, говорите простыми словами ... Пошаговая инструкция будет принята с благодарностью

Большое спасибо

Ниже приведен код для селектора файлов:

- (IBAction)fileChooser:(id)sender {
int i;
NSOpenPanel* openDlg = [NSOpenPanel openPanel];
[openDlg setCanChooseFiles:YES];
[openDlg setCanChooseDirectories:YES];
[openDlg setPrompt:@"Select"];
if ([openDlg runModalForDirectory:nil file:nil] == NSOKButton )
{
    NSArray* files = [openDlg filenames];
    for( i = 0; i < [files count]; i++ )
    {
        [files objectAtIndex:i];

    }

}

}

1 Ответ

1 голос
/ 28 июня 2011

«возвращать имя файла для этой метки» не имеет смысла. Функция или метод возвращает значение только той функции или методу, которые ее вызвали; это единственное, что когда-либо означает «возвращение» в C и Objective-C. Более того, когда функция или метод возвращает значение , оно заканчивается . Это больше не работает. возвращает управление программой функции или методу, вызвавшему ее.

Поэтому возвращать значение из цикла здесь не имеет смысла (метод будет обрабатывать только первое имя файла), а возвращать значение «объекту» не имеет смысла.

Вам необходимо создать выход к полю (метка является разновидностью NSTextField) в классе, который реализует fileChooser:, и подключить этот вывод в редакторе пера. Затем вы можете использовать эту розетку, чтобы указать полю установить stringValue.

(Важное примечание: в отличие от Cocoa Touch, большинство классов AppKit не используют формальные свойства. Вам нужно будет отправить в поле сообщение setStringValue:.)

Розетки охвачены Руководством по основам какао , а документацию по NSTextField можно найти в справочной структуре AppKit .

Еще одна вещь: поскольку пользователь может и вполне разумно выбрать несколько файлов, вам следует рассмотреть этот случай. Простая установка строкового значения текстового поля для каждого имени файла по очереди оставит его отображающим только последнее имя файла в массиве - на самом деле мало чем отличается от установки его для первого имени файла и возврата. После того как текстовое поле заработало, вы должны заменить его табличным представлением.

Если, с другой стороны, вы не хотите поддерживать несколько файлов, то (1) почему? и (2) рассмотреть возможность установки открытой панели, чтобы запретить множественный выбор. (См. Мой ответ на ваш предыдущий вопрос для ссылок на документацию в этом направлении.) Затем вы можете предположить, что, когда ответ «ОК», массив имен файлов содержит ровно один элемент и полностью исключает цикл.

...