+ [NSData bookmarkDataWithContentsOfURL:]: нераспознанный селектор, отправленный в класс - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь определить исходный путь файла псевдонима, используя Objective- C (или, возможно, C ++; это файл .mm). Не очень знакомый, я как-то пропускаю использование + и - методов. Я знаю, что они являются методами класса и экземпляра соответственно, но на практике следующий код с указанными строками дает мне следующее предупреждение и ошибку (при сборке):

Метод класса '+ bookmarkDataWithContentsOfURL : 'не найден (тип возвращаемого значения по умолчанию равен' id ')

-

*** Завершение работы приложения из-за необработанного исключения' NSInvalidArgumentException ', причина:' + [ NSData bookmarkDataWithContentsOfURL:]: нераспознанный селектор, отправленный в класс 0x7fff88942cb8 '

с 0x7fff88942cb8, являющимся адресом NSData согласно lldb.

В какие файлы я должен внести изменения, чтобы bookmarkDataWithContentsOfURL:error: и URLByResolvingBookmarkData работали?

void *pathclass::resolveAliasFromURL(const char *filepath) const
{
  NSError *error = nil;
  NSString *filepathh = [[NSString alloc] initWithUTF8String:filepath];
  NSData *bookmarkk = [NSData bookmarkDataWithContentsOfURL:filepathh]; /*problematic line*/


  BOOL isstale = NO;
  NSURL *actual = [NSURL URLByResolvingBookmarkData:bookmarkk bookmarkDataIsStale:isstale error:error];/*another problematic line, but build fails already*/
  NSString *urlString = [actual absoluteString];
  NSLog(@"%@",urlString);
}

Если есть любые другие неисправности, пожалуйста, укажите.

1 Ответ

3 голосов
/ 22 января 2020

Ваш вызов bookmarkDataWithContentsOfURL: неверен в нескольких отношениях:

Подпись выглядит следующим образом:

+ (NSData *)bookmarkDataWithContentsOfURL:(NSURL *)bookmarkFileURL error:(NSError * _Nullable *)error;

Во-первых, первый параметр имеет тип NSURL*, не NSString*. Затем вы полностью пропускаете параметр ошибки (несмотря на определение переменной для него). Наконец, этот метод является методом класса в NSURL , а не NSData (NSData* - это тип возвращаемого значения).

Итак, во-первых, укажите путь к файлу в NSURL*:

NSURL* bookmarkUrl = [NSURL URLWithString:filepathh];

Затем вызовите функцию, используя правильные аргументы:

NSData *bookmarkk = [NSURL bookmarkDataWithContentsOfURL:bookmarkUrl error:&error];

Вы должны проверить возвращаемое значение по nil - если оно nil, то ошибка произошла, и информация об ошибке будет содержаться внутри error.

Документация весьма полезна.

Ваш звонок на URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error: имеет аналогичные проблемы: вы если пропущено несколько параметров, первый параметр должен быть NSURL, et c. Опять же, документация должна помочь.

...