Xcode无法识别的实现选择器



我在xcode中设置了一个ARC项目。在这个项目中,我添加了一个非弧形静态库。一切正常,构建都能找到。当我运行这个项目时,我得到了这个错误。

由于未捕获的异常而终止应用'NSInvalidArgumentException',原因:'-[__NSCFConstantStringencodedURLParameterString]:发送到实例的选择器无法识别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新手,我已经无计可施了。

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

在项目中使用-ObjC和/或-all_load链接器标志。参考:-all_load链接器标志的作用是什么?

// 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];

不知道如何使用辅助项目,所以我只是删除了其他项目并添加了编译器标志

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

最新更新