【问题标题】:Parse v1.7.4 and Facebook SDK NSInvalidArgumentException', reason: '+[NSData PF_dataFromBase64String:]: unrecognized selector sent to class解析 v1.7.4 和 Facebook SDK NSInvalidArgumentException',原因:'+[NSData PF_dataFromBase64String:]:发送到类的无法识别的选择器
【发布时间】:2015-05-22 13:04:14
【问题描述】:

在将 FB 和 Parse SDK 升级到最新版本后,我收到此错误。我知道这发生在我的应用程序委托中,方法如下。

我有一个混合的 Swift 和 Objective C 应用程序,我的委托是用 Objective C 编写的,当我正在开发下一个版本时,我正在用 Swift 转换和编写新类。如果我注释掉下面的处理程序,则不会发生错误,但我会收到一条登录失败消息,这是我所期望的。按下登录按钮后,出现授权应用程序的 Facebook 页面,然后返回到视图控制器,此时当下面的方法完成时,错误发生。

我理解这个错误的含义,因为在没有它的类上调用了一个选择器。我遇到的问题是我已经检查了所有框架是否存在,并且这个调用似乎是在 PARSE 或 Facebook SDK 中发生的,所以我看不出如何纠正这个问题。任何人都可以帮助解释为什么这个调用失败。

非常感谢。

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {

    NSLog(@"-------------------------end.of.application.FBSDKApplicationDelegate");


    NSLog(@"facebook.Response=%@,url =%@,sourceApp= %@,annotation =%@",application,url,sourceApplication,annotation);


   return  [[FBSDKApplicationDelegate sharedInstance] application:application
                                                           openURL:url
                                                 sourceApplication:sourceApplication
                                                        annotation:annotation];








   // return true;

}




Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSData PF_dataFromBase64String:]: unrecognized selector sent to class 0x11343ca48'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000113193c65 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x0000000112e2cbb7 objc_exception_throw + 45
    2   CoreFoundation                      0x000000011319afad +[NSObject(NSObject) doesNotRecognizeSelector:] + 205
    3   CoreFoundation                      0x00000001130f113c ___forwarding___ + 988
    4   CoreFoundation                      0x00000001130f0cd8 _CF_forwarding_prep_0 + 120
    5   Chored                              0x000000010e2badf5 -[PFDecoder decodeDictionary:] + 658
    6   Chored                              0x000000010e2bb545 -[PFDecoder decodeObject:] + 130
    7   Chored                              0x000000010e2bb1b8 __30-[PFDecoder decodeDictionary:]_block_invoke + 94
    8   CoreFoundation                      0x0000000113192fbc ____NSDictionaryEnumerate_block_invoke421 + 28
    9   CoreFoundation                      0x0000000113092400 CFBasicHashApply + 128
    10  CoreFoundation                      0x00000001130cb85b __NSDictionaryEnumerate + 619
    11  Chored                              0x000000010e2bad5c -[PFDecoder decodeDictionary:] + 505
    12  Chored                              0x000000010e2bb545 -[PFDecoder decodeObject:] + 130
    13  Chored                              0x000000010e259631 -[PFCommandNetworkOperation _operationDidFinish] + 259
    14  CFNetwork                           0x000000011100c0bc __65-[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:]_block_invoke + 69
    15  CFNetwork                           0x000000011100c060 -[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:] + 199
    16  CFNetwork                           0x000000011100c1c7 -[NSURLConnectionInternal _withActiveConnectionAndDelegate:] + 48
    17  CFNetwork                           0x0000000110edb757 ___ZN27URLConnectionClient_Classic26_delegate_didFinishLoadingEU13block_pointerFvvE_block_invoke + 107
    18  CFNetwork                           0x0000000110fa8de1 ___ZN27URLConnectionClient_Classic18_withDelegateAsyncEPKcU13block_pointerFvP16_CFURLConnectionPK33CFURLConnectionClientCurrent_VMaxE_block_invoke_2 + 273
    19  CFNetwork                           0x0000000110ec6a26 _ZN19RunloopBlockContext13_invoke_blockEPKvPv + 72
    20  CoreFoundation                      0x000000011309a354 CFArrayApplyFunction + 68
    21  CFNetwork                           0x0000000110ec68e7 _ZN19RunloopBlockContext7performEv + 133
    22  CFNetwork                           0x0000000110ec6726 _ZN17MultiplexerSource7performEv + 256
    23  CFNetwork                           0x0000000110ec653c _ZN17MultiplexerSource8_performEPv + 72
    24  CoreFoundation                      0x00000001130c7431 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    25  CoreFoundation                      0x00000001130bd2fd __CFRunLoopDoSources0 + 269
    26  CoreFoundation                      0x00000001130bc934 __CFRunLoopRun + 868
    27  CoreFoundation                      0x00000001130bc366 CFRunLoopRunSpecific + 470
    28  CoreFoundation                      0x000000011316a661 CFRunLoopRun + 97
    29  Foundation                          0x0000000112988383 __NSOQSchedule_f + 184
    30  libdispatch.dylib                   0x00000001141f2614 _dispatch_client_callout + 8
    31  libdispatch.dylib                   0x00000001141d96a7 _dispatch_queue_drain + 2176
    32  libdispatch.dylib                   0x00000001141d8cc0 _dispatch_queue_invoke + 235
    33  libdispatch.dylib                   0x00000001141dc3b9 _dispatch_root_queue_drain + 1359
    34  libdispatch.dylib                   0x00000001141ddb17 _dispatch_worker_thread3 + 111
    35  libsystem_pthread.dylib             0x000000011455f637 _pthread_wqthread + 729
    36  libsystem_pthread.dylib             0x000000011455d40d start_wqthread + 13
)
libc++abi.dylib: terminating with uncaught exception of type NSException

【问题讨论】:

  • 我可以确认这也发生在 1.7.3 中。 Parse 开始吃力了。大约有 5 个以上的版本,他们仍然没有修复 ObjC 中的可空块,现在这个?他们真的追求数量而不是质量。他们似乎在每次更新时都会发布新功能,但从不修复任何东西。

标签: ios objective-c parse-platform facebook-login facebook-ios-sdk


【解决方案1】:

问题不在于你。它是由版本 1.7.4 创建的。我也遇到过。这个临时修复是 NSData 上的一个类别,它提供了缺失的选择器。这是一个标题,NSData+PFData.h:

@import Foundation;

@interface NSData (PFData)
+ (NSData *) PF_dataFromBase64String: (NSString *) base64;
- (NSString *) PF_base64EncodedString;
@end

实现NSData+PFData.m:

#import "NSData+PFData.h"

@implementation NSData (PFData)

+ (NSData *) PF_dataFromBase64String: (NSString *) base64 {
    return [NSData.alloc initWithBase64EncodedString: base64 options: 0];
} // +PF_dataFromBase64String:

- (NSString *) PF_base64EncodedString {
    return [self base64EncodedStringWithOptions: 0];
} // -PF_base64EncodedString

@end

您应该计划在不再需要此类别时将其删除,例如使用 Parse v1.7.5。

【讨论】:

  • 非常感谢,这很有效,但在砖墙上,现在有另一个问题。这可能是有史以来最有问题的 SDK 升级!
  • @adohono 谢谢,这行得通。 Parse 负责 ios SDK 的每个人现在还没有被解雇吗?...他们仍然没有修复 1.6 的完成块!太离谱了。
  • Parse 仍然是一家年轻的公司。他们正在努力学习如何为付费客户提供真正的支持。我已经通过提交错误并让他们的员工达到高标准来解决您的类似投诉。 (诚​​然,他们经常让我失望。我让他们的拥护者当面告诉我,他们会解决我的担忧,然后不回复电子邮件。叹气。)我建议您针对完成块问题提交错误。直接向 Hector Ramos 发送电子邮件,他似乎是他们的主要“开发者倡导者”。制造吵闹声。吱吱作响的车轮等等......
猜你喜欢
  • 1970-01-01
  • 2015-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多