3

我在 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 新手,我束手无策。

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

4

3 回答 3

4

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

于 2012-09-13T15:33:27.090 回答
1
// 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];
于 2012-09-12T21:21:19.310 回答
0

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

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

于 2012-09-12T22:30:52.857 回答