繁体   English   中英

“警告: &#39; <CLASS> &#39;可能不响应&#39;&lt;[-| +] FUNCTION&gt;&#39;&#39;”目标C / Xcode编译器警告

[英]“warning: '<CLASS>'may not respond to '<[-|+]FUNCTION>'” Objective C/Xcode Compiler Warnings

我想出了一个,但认为它值得自己提出问题。

我是Xcode和Objective C的新手,并且了解它的各种古怪之处。 例如,当我尝试编译以下代码时,会出现编译器警告“警告:”可能无法响应“ <[-| +] FUNCTION>””,由于我希望创建一个私有代码,因此所有代码均出现在实现文件中此类的静态实用函数:

// Here's the function declaration in the implementation file (I don't want it in the header)
+(void)authenticationRedirectTo:(NSURL *)url WithRelayState:(NSString *)relayState AndSAMLResponse:(NSString *)samlResponse {
...
}

...

// Later on, here's a call to that same function:
[CnaCalendarController authenticationredirectTo:formActionURL WithRelayState:relayState AndSAMLResponse:SAMLResponse];
...

编译时,将产生以上警告。 接下来,我将发布我的解决方案。 也可以随意贡献您的想法!

如果您真正想要的是私有方法,也就是说,您不希望该方法位于头文件中,那么我想使用Category来完成此操作。 我只是在实现上方定义类别。

// Enforce private methods by putting them in a category.
@interface YourClass (PrivateMethods)

+(void)authenticationRedirectTo:(NSURL *)url WithRelayState:(NSString *)relayState AndSAMLResponse:(NSString *)samlResponse;

@end

@implementation YourClass

+(void)authenticationRedirectTo:(NSURL *)url WithRelayState:(NSString *)relayState AndSAMLResponse:(NSString *)samlResponse {
...
}
@end

现在,实现中的方法顺序无关紧要,因此可以正确地“ #pragma mark”

问题出在您的方法调用上:

[CnaCalendarController authenticationredirectTo:formActionURL WithRelayState:relayState AndSAMLResponse:SAMLResponse];

请注意,“ authenticationredirectTo:...”中的第一个“ r”为小写字母,但您已将其声明为“ authenticationRedirectTo:...”,并使用大写字母“ R”。 鉴于此,编译器抱怨找不到正在调用的方法的声明也就不足为奇了。 该代码也可能在该行崩溃,因为未定义小写字母“ r”的方法。

我认为问题是,您在调用此函数后声明了该函数。 而且在编译时根本找不到它。

好的,这是我所承诺的解决方案:

问题1:在处理的源代码中调用出现函数声明或实现时,Xcode会生成错误警告。 就我而言,它们在同一个文件中,因此我能够在调用上方转到函数实现。

还要检查导入顺序,以确保在调用该功能的导入之前导入了该功能。 我没有看到这种情况,但是看到了其他情况。

问题2:似乎Xcode在函数名称的长度上有一些限制。 如下面的片段所示,缩短我的函数名称即可解决此问题。 我显然会选择一些更有意义的东西。

// Here is the warning function commented out and a *shorter* name in place.
//+(void)authenticationRedirectTo:(NSURL *)url WithRelayState:(NSString *)relayState AndSAMLResponse:(NSString *)samlResponse {
+(void)X:(NSURL *)url Y:(NSString *)relayState Z:(NSString *)samlResponse {

希望这可以帮助您解决麻烦。 如果有用的话,请别忘了投票。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM