+[NSData bookmarkDataWithContentsOfURL:]: 无法识别的选择器发送到 class
+[NSData bookmarkDataWithContentsOfURL:]: unrecognized selector sent to class
我正在尝试使用 Objective-C(或者可能是 C++;它是一个 .mm
文件)来解析别名文件的原始路径。不是很熟悉,我不知何故缺少 +
和 -
方法的用法。我知道它们分别是 class 和实例方法,但实际上,下面的代码和指定的行给我以下警告和错误(在构建时):
Class method '+bookmarkDataWithContentsOfURL:' not found (return type defaults to 'id')
-
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSData bookmarkDataWithContentsOfURL:]: unrecognized selector sent to class 0x7fff88942cb8'
其中 0x7fff88942cb8
是根据 lldb 的 NSData 地址。
我应该在哪些文件中进行更改才能使 bookmarkDataWithContentsOfURL:error:
and 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);
}
如有其他错误,请指出。
您对 bookmarkDataWithContentsOfURL:
的调用在几个方面是错误的:
签名看起来像这样:
+ (NSData *)bookmarkDataWithContentsOfURL:(NSURL *)bookmarkFileURL error:(NSError * _Nullable *)error;
首先,第一个参数的类型是NSURL*
,不是NSString*
。接下来,您完全错过了错误参数(尽管为它定义了一个变量)。最后,该方法是 NSURL
not NSData
上的 class 方法(NSData*
是 return 类型)。
因此,首先,将您的文件路径设为 NSURL*
:
NSURL* bookmarkUrl = [NSURL URLWithString:filepathh];
然后,使用适当的参数调用函数:
NSData *bookmarkk = [NSURL bookmarkDataWithContentsOfURL:bookmarkUrl error:&error];
您应该对照 nil
检查 returned 值 - 如果它是 nil
,则发生错误,并且错误信息将包含在 error
中。
documentation 很有帮助。
你对 URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error:
的调用有类似的问题:你缺少几个参数,第一个参数应该是 NSURL
,等等。同样,documentation 应该有帮助。
我正在尝试使用 Objective-C(或者可能是 C++;它是一个 .mm
文件)来解析别名文件的原始路径。不是很熟悉,我不知何故缺少 +
和 -
方法的用法。我知道它们分别是 class 和实例方法,但实际上,下面的代码和指定的行给我以下警告和错误(在构建时):
Class method '+bookmarkDataWithContentsOfURL:' not found (return type defaults to 'id')
-
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSData bookmarkDataWithContentsOfURL:]: unrecognized selector sent to class 0x7fff88942cb8'
其中 0x7fff88942cb8
是根据 lldb 的 NSData 地址。
我应该在哪些文件中进行更改才能使 bookmarkDataWithContentsOfURL:error:
and 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);
}
如有其他错误,请指出。
您对 bookmarkDataWithContentsOfURL:
的调用在几个方面是错误的:
签名看起来像这样:
+ (NSData *)bookmarkDataWithContentsOfURL:(NSURL *)bookmarkFileURL error:(NSError * _Nullable *)error;
首先,第一个参数的类型是NSURL*
,不是NSString*
。接下来,您完全错过了错误参数(尽管为它定义了一个变量)。最后,该方法是 NSURL
not NSData
上的 class 方法(NSData*
是 return 类型)。
因此,首先,将您的文件路径设为 NSURL*
:
NSURL* bookmarkUrl = [NSURL URLWithString:filepathh];
然后,使用适当的参数调用函数:
NSData *bookmarkk = [NSURL bookmarkDataWithContentsOfURL:bookmarkUrl error:&error];
您应该对照 nil
检查 returned 值 - 如果它是 nil
,则发生错误,并且错误信息将包含在 error
中。
documentation 很有帮助。
你对 URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error:
的调用有类似的问题:你缺少几个参数,第一个参数应该是 NSURL
,等等。同样,documentation 应该有帮助。