解析 v1.7.4 和 Facebook SDK NSInvalidArgumentException',原因:'+[NSData PF_dataFromBase64String:]: 无法识别的选择器发送到 class
Parse v1.7.4 and Facebook SDK NSInvalidArgumentException', reason: '+[NSData PF_dataFromBase64String:]: unrecognized selector sent to class
将 FB 和 Parse SDK
升级到最新版本后出现此错误。我知道这发生在我的应用委托中的以下方法中。
我有一个混合的 swift 和 objective c 应用程序,我的委托是用 Objective C 编写的,当我正在开发下一个版本时,我正在转换和编写新的 class在 Swift 中。如果我注释掉下面的处理程序,则不会发生错误,但我会收到一条登录失败消息,这正是我所期望的。按下登录按钮后,出现 Facebook 页面以授权该应用程序,然后 returns 到视图控制器,正是在此时完成以下方法时发生错误。
我理解此错误的含义,因为在没有选择器的 class 上调用了选择器。我遇到的问题是我已经检查过所有框架都存在,而且这个调用似乎是从 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.4 创建的。我也面对过。这个临时修复是 NSData 上的一个类别,它提供了缺失的选择器。这是一个 header, 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。
将 FB 和 Parse SDK
升级到最新版本后出现此错误。我知道这发生在我的应用委托中的以下方法中。
我有一个混合的 swift 和 objective c 应用程序,我的委托是用 Objective C 编写的,当我正在开发下一个版本时,我正在转换和编写新的 class在 Swift 中。如果我注释掉下面的处理程序,则不会发生错误,但我会收到一条登录失败消息,这正是我所期望的。按下登录按钮后,出现 Facebook 页面以授权该应用程序,然后 returns 到视图控制器,正是在此时完成以下方法时发生错误。
我理解此错误的含义,因为在没有选择器的 class 上调用了选择器。我遇到的问题是我已经检查过所有框架都存在,而且这个调用似乎是从 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.4 创建的。我也面对过。这个临时修复是 NSData 上的一个类别,它提供了缺失的选择器。这是一个 header, 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。