我在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新手,我在我的智慧结束。
该文件包含在编译源中。没有任何错误,它编译并运行其他代码就好了。我似乎错过了一小部分而我无法理解它是什么。如果你可以帮忙,请做。
答案 0 :(得分:4)
在项目中使用-ObjC
和/或-all_load
链接器标志。参考:What does the -all_load linker flag do?
答案 1 :(得分: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];
答案 2 :(得分:0)
不确定如何使用辅助项目执行此操作,因此我只删除了其他项目并添加了编译器标记