Ios AFNetworking和-[[uuuu NSCFBoolean length]:发送到实例0x1f54358的无法识别的选择器

Ios AFNetworking和-[[uuuu NSCFBoolean length]:发送到实例0x1f54358的无法识别的选择器,ios,objective-c,static-libraries,afnetworking,unrecognized-selector,Ios,Objective C,Static Libraries,Afnetworking,Unrecognized Selector,我现在有几天遇到了这个奇怪的问题2014-03-24 16:50:56.097 MyApp[1610:4703]-[\uu NSCFBoolean length]:未识别的选择器发送到实例0x1f54358 我已经调试了我的库,它是一个静态库,我将它打包为.framework并分发给开发人员 就断点而言,调试有点困难,因此我将static library.xcodeproj文件添加到一个示例客户机应用程序中,并尝试使用它。经过一些研究,并试图找出这是发生在哪里,我没有其他理由相信这是一个网络问题

我现在有几天遇到了这个奇怪的问题
2014-03-24 16:50:56.097 MyApp[1610:4703]-[\uu NSCFBoolean length]:未识别的选择器发送到实例0x1f54358

我已经调试了我的库,它是一个静态库,我将它打包为.framework并分发给开发人员

就断点而言,调试有点困难,因此我将static library.xcodeproj文件添加到一个示例客户机应用程序中,并尝试使用它。经过一些研究,并试图找出这是发生在哪里,我没有其他理由相信这是一个网络问题

我的静态库中有以下代码:

编辑:

// Selector parameter (NSData *)theData

    NSMutableURLRequest *aRequest = [[[NSMutableURLRequest alloc] initWithURL:theURL                                                                              cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0f] autorelease];

            [aRequest setHTTPMethod:@"POST"];
            [aRequest setValue:key forHTTPHeaderField:@"Custom-Header"];
            [aRequest setValue:@"plain/text" forHTTPHeaderField:@"Content-Type"];

    NSMutableData *postData = [NSMutableData data];
            [postData appendData:theData];
            [aRequest setHTTPBody:postData];

    AFHTTPRequestOperation* operation = [[AFHTTPRequestOperation alloc] initWithRequest:aRequest];

                [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
                    {
                    _pendingDispatchesCount --;
                    NSLog(@"%@, %ld", kServerRespondedMsg, (long)operation.response.statusCode);
                    BOOL statusCodeAcceptable = [[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 100)] containsIndex:[operation.response statusCode]];
                    dispatch_async(dispatch_get_main_queue(),
                        ^{
                            [delegate analyticsOperationCompleted:statusCodeAcceptable forData:analyticsData];
                        });
                    }
                failure:^(AFHTTPRequestOperation *operation, NSError *error)
                    {
                    _pendingDispatchesCount --;
                    NSLog(@"%@, %ld", kServerRespondedMsg, (long)operation.response.statusCode);
                    dispatch_async(dispatch_get_main_queue(),
                        ^{
                            [delegate analyticsOperationCompleted:NO forData:analyticsData];
                        });
                    }];

                [operation start];
如果我只是注释
[operation start]示例客户端正确启动。如果让操作开始,我会将
2014-03-24 16:50:56.097 MyApp[1610:4703]-[\uu NSCFBoolean length]:无法识别的选择器发送到实例

现在让我抓狂,因为这个错误只发生在一个开发人员身上,他报告了这个错误,他实际上创建了一个复制它的示例

编辑: 找到了获取stacktrace的方法,似乎这不是由我的应用程序引起的:

回溯:

0   CoreFoundation                      0x000000010201c495 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x0000000101d7b99e objc_exception_throw + 43
    2   CoreFoundation                      0x00000001020ad65d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
    3   CoreFoundation                      0x000000010200dd8d ___forwarding___ + 973
    4   CoreFoundation                      0x000000010200d938 _CF_forwarding_prep_0 + 120
    5   CoreFoundation                      0x000000010200e9d1 CFURLCreateStringByAddingPercentEscapes + 81
    6   CFNetwork                           0x0000000103fdf1ab _ZL13appendEscapedP10__CFStringPKS_ + 40
    7   CFNetwork                           0x0000000103fdef69 _ZL25initializeUserAgentStringv + 124
    8   libsystem_pthread.dylib             0x00000001026d58d6 __pthread_once_handler + 65
    9   libsystem_platform.dylib            0x00000001025e3156 _os_once + 73
    10  libsystem_pthread.dylib             0x00000001026d5875 pthread_once + 57
    11  CFNetwork                           0x0000000103fdeb23 cleanUpRequest + 105
    12  CFNetwork                           0x0000000103fde824 _ZN17HTTPNetConnection19prepareTransmissionEP17HTTPNetStreamInfoP17__CoreWriteStream + 1224
    13  CFNetwork                           0x0000000103fdda65 _ZN13NetConnection7enqueueEPvh + 539
    14  CFNetwork                           0x0000000103fdd7e4 _ZN17HTTPNetStreamInfo16_streamImpl_OpenEP13CFStreamErrorPh + 88
    15  CFNetwork                           0x000000010403c295 _ZThn120_N17HTTPNetStreamInfo16_streamImpl_OpenEP13CFStreamErrorPh + 13
    16  CFNetwork                           0x0000000103fbdfc2 _ZN14CoreStreamBase21_streamInterface_OpenEv + 80
    17  CFNetwork                           0x0000000103fdd057 _ZN12HTTPProtocol10openStreamEv + 255
    18  CFNetwork                           0x0000000104048c41 _ZN12HTTPProtocol26useNetConnectionForRequestEP13NetConnectionP15__CFHTTPMessageh + 1753
    19  CFNetwork                           0x0000000103fdc268 _ZN24HTTPConnectionCacheEntry28dispatchConnectionToProtocolEP13NetConnectionP12HTTPProtocolP18HTTPRequestMessageh + 276
    20  CFNetwork                           0x0000000103fdc027 _ZN24HTTPConnectionCacheEntry34notifyNextProtocolOfOpenConnectionEP13NetConnectionh + 301
    21  CFNetwork                           0x0000000103fd9230 _ZN24HTTPConnectionCacheEntry25enqueueRequestForProtocolEP12HTTPProtocolP15__CFHTTPMessage + 650
    22  CFNetwork                           0x0000000103fd8bf0 _ZN19HTTPConnectionCache34_onqueue_enqueueRequestForProtocolEP12HTTPProtocolP15__CFHTTPMessage + 178
    23  CFNetwork                           0x000000010404e843 ___ZN19HTTPConnectionCache25enqueueRequestForProtocolEP12HTTPProtocolP15__CFHTTPMessage_block_invoke + 26
    24  CoreFoundation                      0x0000000101fc2f74 CFArrayApplyFunction + 68
    25  CFNetwork                           0x0000000103fd43e7 _ZN19RunloopBlockContext7performEv + 133
    26  CFNetwork                           0x0000000103fd4217 _ZN17MultiplexerSource7performEv + 247
    27  CFNetwork                           0x0000000103fd403a _ZN17MultiplexerSource8_performEPv + 72
    28  CoreFoundation                      0x0000000101fabd21 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    29  CoreFoundation                      0x0000000101fab5f2 __CFRunLoopDoSources0 + 242
    30  CoreFoundation                      0x0000000101fc746f __CFRunLoopRun + 767
    31  CoreFoundation                      0x0000000101fc6d83 CFRunLoopRunSpecific + 467
    32  Foundation                          0x000000010193089c +[NSURLConnection(Loader) _resourceLoadLoop:] + 348
    33  Foundation                          0x00000001019832df __NSThread__main__ + 1167
    34  libsystem_pthread.dylib             0x00000001026d4899 _pthread_body + 138
    35  libsystem_pthread.dylib             0x00000001026d472a _pthread_struct_init + 0
    36  libsystem_pthread.dylib             0x00000001026d8fc9 thread_start + 13
编辑: 链接到完整的PLCrashReporter崩溃报告

感谢您的帮助或想法,提前感谢


问候。

查看堆栈跟踪并思考可能发生的情况。堆栈跟踪不是什么神奇的东西,而是与代码直接相关的东西

崩溃是由某人向包含
布尔值的
NSNumber
发送“length”消息引起的

在堆栈跟踪上,我们可以看到
CFURLCreateStringByAddingPercentEscapes
。因此,
CFURLCreateStringByAddingPercentEscapes
似乎是用
NSNumber
对象而不是字符串调用的

为什么要调用
cfurlCreateStringByAddingPercentesEscapes
?它通常用于包含URL和类似内容的字符串,这些内容无法按原样传输,需要翻译,例如将空格转换为%20

因此,您可能将一个
NSNumber
传递给将通过网络发送的内容。类似于头属性、
URL
,等等


检查您在
URL
请求中设置的所有内容。问题可能出在“阿雷奎斯特”中,尤其是因为你决定隐藏它。(这是潜意识不想让我们看到你的错误,这当然会适得其反)

堆栈跟踪是什么?您可能正在提供一个
NSNumber
实例,其中需要一个
NSString
。是的,如果它给我一个堆栈跟踪,我很容易找到问题,它不会在控制台中输出任何内容,而是我只得到这个->我发现了问题,我正在检查nil NSString中的长度!它就在那里,看不见。谢谢,我怀疑是不是。。。您可以随时向
nil
对象发送消息。如果您用
length
发送消息,您将返回0。断言告诉您发生了什么(正如Wain前面指出的)。您正在将
length
发送到创建为布尔值的
NSNumber
实例。该对象不响应
length
方法。能否提供完整的崩溃日志?它还包括其他有助于诊断问题的重要信息。非常感谢您的回答。为我辩护,我只是继承了别人的代码,这就是为什么很难跟踪这个bug,仍然在弄清楚他在那里做什么:D.我现在就用你的信息来搜索这个,我只需要找到他在哪里调用CFURLCreateStringByAddingPercentEscapes。用aRequest结构编辑了这个问题。@TaskosGeorge:很可能在幕后调用它。更重要的是验证应该是URL的内容是否确实存在(例如,您发布的代码的第一行中有一个)。@taskosgorege:此外,如果此项目使用手动保留计数而不是ARC,这可能是一个过度扩展问题,在这种情况下,你会想打开僵尸。谢谢你的评论。