Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c iOS 5:是否将NSString类别包括NSCFConstantString?_Objective C_Ios_Ios5_Objective C Category - Fatal编程技术网

Objective c iOS 5:是否将NSString类别包括NSCFConstantString?

Objective c iOS 5:是否将NSString类别包括NSCFConstantString?,objective-c,ios,ios5,objective-c-category,Objective C,Ios,Ios5,Objective C Category,我有一个NSString类别类(NSString+URLEncoding.h)。 我遇到未知选择器崩溃,因为我调用category方法的字符串已被iOS优化为NSCFConstantString -[__NSCFConstantString URLEncodedString]: unrecognized selector sent to instance 0x290174 我从以下方面了解到iOS 5中的NSCFConstantString与NSCFString优化: 有人知道我如何让NSS

我有一个
NSString
类别类(
NSString+URLEncoding.h
)。 我遇到未知选择器崩溃,因为我调用category方法的字符串已被iOS优化为
NSCFConstantString

-[__NSCFConstantString URLEncodedString]: unrecognized selector sent to instance 0x290174
我从以下方面了解到iOS 5中的
NSCFConstantString
NSCFString
优化:

有人知道我如何让NSString类别包含常量字符串,甚至强制var成为
NSString/NSCFString
而不是
NSCFConstantString

干杯, Z

-编辑-

  • 链接器标志
    -ObjC-all_load
    都已实现
  • NSString+URLEncoding.m包含在目标编译源代码中
  • NSString+URLEncoding.m实现URLEncodedString方法
  • 检查是否有僵尸
我正在向ShareKit 2.0添加共享服务

标题:

@interface NSString (OAURLEncodingAdditions)

- (NSString *)URLEncodedString;
实施:

@implementation NSString (OAURLEncodingAdditions)

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

\uu NSCFConstantString
NSString
的子类,因此
NSString
上的任何类别也适用于
\uu NSCFConstantString


您没有在类别中链接,或者您的类别在其
@实现中没有定义
URLEncodedString
方法

链接器存在问题,可能导致其死代码剥离完全忽略任何仅包含obj-c类别(或未引用的)的对象文件。理论上,将
-ObjC
标志传递给链接器应该可以解决这个问题,但这似乎并不总是有效的。您可以通过提供
-all\u load
链接器标志来解决此问题,这将导致链接器始终链接所有对象文件

请注意,如果类别是包含在某个位置的子项目或库的一部分,则可能必须在父项目上设置
-all\u load


更新:我相信
-ObjC
现在是可靠的,并且已经存在多年了,所以你可以停止使用
-all\u load
来解决这个问题。

刚刚花了30分钟来解决完全相同的问题。在摆弄链接器之后,我发现在目标的构建阶段,该类别不在编译源代码列表中。一定要检查它是否在那里。

问题解决了吗?如果不是这样,那么如果你需要,我可以试着解决这个问题?你链接的博客中的
\NSCFConstantString
是一个骗局。博客中的问题与子类无关,而与苹果试图优化一个对象的所有空字符串这一事实有关。如果表示空字符串的一个对象是一个简单的
NSString
,则博客的代码仍然会被破坏。特别是当您有多个目标时,如果您忘记向多个目标添加新添加的文件,则可能会导致此问题。奇怪的是,每次需要使用Objective-C库时,我总是忘记这一点。此设置应该更易于使用。谢谢凯文·巴拉德的回答。