我正在尝试使用Objective-C(或C ++;它是.mm
文件)来解析别名文件的原始路径。不太熟悉,我不知何故缺少+
和-
方法的用法。我知道它们分别是类和实例方法,但是在实践中,下面的代码,带有指示的行,给我以下警告和错误(在构建时):
找不到类方法'+ bookmarkDataWithContentsOfURL:'(返回类型默认为'id')
-
***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'+ [NSData bookmarkDataWithContentsOfURL:]:无法识别的选择器已发送给类0x7fff88942cb8'
其中0x7fff88942cb8
是根据lldb的NSData地址。
我应该在哪个文件中进行更改,以使bookmarkDataWithContentsOfURL:error:
和bookmarkDataWithContentsOfURL:error:
正常工作?
URLByResolvingBookmarkData
如果还有其他故障,请指出。
您对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;
。接下来,您完全错过了error参数(尽管为其定义了变量)。最后,该方法是NSURL*
not NSString*
(NSURL
是返回类型)上的类方法。
因此,首先,将文件路径设置为NSData
:
NSData*
然后,使用适当的参数调用该函数:
NSURL*
您应该对照NSURL* bookmarkUrl = [NSURL URLWithString:filepathh];
检查返回的值-如果它是NSData *bookmarkk = [NSURL bookmarkDataWithContentsOfURL:bookmarkUrl error:&error];
,则发生错误,并且错误信息将包含在nil
中。
nil
很有帮助。
您对error
的调用也有类似的问题:您缺少几个参数,第一个参数应该为documentation,依此类推。同样,URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error:
应该可以。