在Objective-C ++中的哪里声明类方法(+)?

问题描述 投票:0回答:1

我正在尝试使用Objective-C(或C ++;它是.mm文件)来解析别名文件的原始路径。不太熟悉,我不知何故缺少+-方法的用法。我知道它们分别是类和实例方法,但是在实践中,下面的代码,带有指示的行,给我以下警告和错误(在构建时):

找不到类方法'+ bookmarkDataWithContentsOfURL:'(返回类型默认为'id')

-

***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'+ [NSData bookmarkDataWithContentsOfURL:]:无法识别的选择器已发送给类0x7fff88942cb8'

其中0x7fff88942cb8是根据lldb的NSData地址。

我应该在哪个文件中进行更改,以使bookmarkDataWithContentsOfURL:error:bookmarkDataWithContentsOfURL:error:正常工作?

URLByResolvingBookmarkData

如果还有其他故障,请指出。

objective-c macos class objective-c++ class-method
1个回答
0
投票

您对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:应该可以。

© www.soinside.com 2019 - 2024. All rights reserved.