【问题标题】:Xcode Unrecognized Selector to ImplementationXcode Unrecognized Selector to Implementation
【发布时间】:2012-09-05 22:42:31
【问题描述】:

我在 xcode 中有一个 ARC 项目设置。在那个项目中,我添加了一个非弧静态库。一切正常并构建找到。运行项目时出现此错误。

由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'-[__NSCFConstantString encodedURLParameterString]:发送到实例的无法识别的选择器 0x4a030'

从此代码:

NSString * value = [params objectForKey:key];
[_params setObject:[value encodedURLParameterString] forKey:key];

这是试图调用它

@implementation NSString (OAURLEncodingAdditions)

- (NSString *)encodedURLParameterString {
    NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                           (CFStringRef)self,
                                                                           NULL,
                                                                           CFSTR(":/=,!$&'()*+;[]@#?"),
                                                                           kCFStringEncodingUTF8);
    return [result autorelease];
}

@end

错误似乎是说找不到这个函数。当然它编译得很好,我可以很好地跳转到定义。字符串值是一个常量字符串,它当然继承自 NSString。这在我从中提取的另一个项目中效果很好。它完美地找到了这个功能,所以作为一个 Xcode 新手,我束手无策。

该文件包含在编译源中。没有任何错误,它可以很好地编译和运行其他代码。我似乎遗漏了一小部分,我只是不明白它是什么。如果你能帮忙,请做。

【问题讨论】:

    标签: objective-c xcode


    【解决方案1】:

    在您的项目中使用-ObjC 和/或-all_load 链接器标志。参考:What does the -all_load linker flag do?

    【讨论】:

      【解决方案2】:
      // file NSString+URLEncoding.m
      #import <Foundation/Foundation.h>
      @interface NSString (OAURLEncodingAdditions)
      - (NSString *)encodedURLParameterString;
      @end
      
      // file NSString+URLEncoding.h - this file is marked with -fno-objc-arc
      #import "NSString+URLEncoding.h"
      @implementation NSString (OAURLEncodingAdditions)
      - (NSString *)encodedURLParameterString {
          NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                                 (CFStringRef)self,
                                                                                 NULL,
                                                                                 CFSTR(":/=,!$&'()*+;[]@#?"),
                                                                                 kCFStringEncodingUTF8);
          return [result autorelease];
      }
      @end
      

      鉴于上面的代码,这段代码应该可以工作:

      #import "NSString+URLEncoding.h"
      // ...
      NSString * value = @"xxxxx";
      value = [value encodedURLParameterString];
      

      【讨论】:

      • 我没有直接调用该函数。我尝试导入它,然后直接调用该函数,但它仍然给我同样的错误。
      • 检查包含方法 encodedURLParameterString 的文件的名称是什么。假设它是“NSString+URLEncoding.m”。然后转到发生错误的文件并将其写在顶部:#import NSString+URLEncoding.h"。然后再试一次。
      • 这不起作用。我认为这与使用非弧选择器有关
      • 它与 -fno-objc-arc 无关。我用一个例子编辑了答案。
      【解决方案3】:

      不确定如何使用辅助项目执行此操作,所以我只是删除了另一个项目并添加了编译器标志

      http://blog.evanmulawski.com/?p=36

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多