问题
Just installed ios8 on my device and am now receiving this error:
-[GKLocalPlayerInternal name]: unrecognized selector sent to instance 0x1b6e3f80
I do not see this error on two other devices with ios7 installed. On my device with ios8 installed I have already verified that GameCenter Sandbox is enabled by going to settings -> GameCenter -> Check "Sandbox"
I can avoid the error by commenting out this code below:
// after checking that game center is available and authentication handler has not already been set, set the authentication handlers
[localPlayer setAuthenticateHandler:(^(UIViewController* viewController, NSError *error) {
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
if (!error && viewController)
{
[self showAuthenticationDialogWhenReasonable: viewController fromBaseViewController:baseController];
}
else if (localPlayer.isAuthenticated)
{
[self authenticatedPlayerandShowPopUpIfUnable:showPopUp];
}
else
{
[self disableGameCenterandShowPopUpIfUnable:showPopUp];
}
})];
The stack trace reveals this:
- thread #1: tid = 0x4011c, 0x3775ec64 libobjc.A.dylib`objc_exception_throw, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x3775ec64 libobjc.A.dylib`objc_exception_throw
frame #1: 0x2a0b6188 CoreFoundation`-[NSObject(NSObject) doesNotRecognizeSelector:] + 188
frame #2: 0x2a0b40a6 CoreFoundation`___forwarding___ + 714
frame #3: 0x29fe6208 CoreFoundation`_CF_forwarding_prep_0 + 24
frame #4: 0x2d3ff688 SpriteKit`-[SKNode isEqual:] + 164
frame #5: 0x2ad039fe Foundation`+[NSObject(NSDelayedPerforming) cancelPreviousPerformRequestsWithTarget:] + 358
frame #6: 0x30d9b872 GameCenterFoundation`-[GKPlayer postChangeNotification] + 38
frame #7: 0x30daed20 GameCenterFoundation`__52-[GKDaemonProxy setLocalPlayer:authenticated:reply:]_block_invoke + 848
frame #8: 0x0062faea libdispatch.dylib`_dispatch_call_block_and_release + 10
frame #9: 0x0062fad6 libdispatch.dylib`_dispatch_client_callout + 22
frame #10: 0x006334f6 libdispatch.dylib`_dispatch_main_queue_callback_4CF + 810
frame #11: 0x2a076be8 CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 8
frame #12: 0x2a0752e8 CoreFoundation`__CFRunLoopRun + 1512
frame #13: 0x29fc3620 CoreFoundation`CFRunLoopRunSpecific + 476
frame #14: 0x29fc3432 CoreFoundation`CFRunLoopRunInMode + 106
frame #15: 0x313710a8 GraphicsServices`GSEventRunModal + 136
frame #16: 0x2d5ad808 UIKit`UIApplicationMain + 1440
frame #17: 0x0019ddd0 ReconInForce`main(argc=1, argv=0x003c4a5c) + 116 at main.m:16
Any thoughts on this issue?
Thanks in advance!
回答1:
Found a solution: doesn't seem like the problem was related to game center login so much...
I had a bit of code that took the form of:
-(void) setAnnimationsPlaying:(BOOL)annimationsPlaying{
...some other code...
_annimationsPlaying = annimationsPlaying;
if (annimationsPlaying)
[self performSelector:@selector(xyz) withObject:nil afterDelay:0.1];
}
-(void) xyz{
if (!self.annimationsPlaying)
return;
...some other code...
[self performSelector:@selector(xyz) withObject:nil afterDelay:6.0];
}
Replacing that code with something of this form solved my problem:
-(void) setAnnimationsPlaying:(BOOL)annimationsPlaying{
...some other code...
_annimationsPlaying = annimationsPlaying;
if (self.annimationsPlaying) {
[self xyz];
self.timer = [NSTimer scheduledTimerWithTimeInterval:6.0f target:self selector:@selector(xyz) userInfo:nil repeats:YES];
}else{
[self.timer invalidate];
}
}
-(void) xyz{
if (!self.annimationsPlaying)
return;
...some other code...
}
Hope that helps!!
来源:https://stackoverflow.com/questions/25984424/ios8-gklocalplayerinternal-unrecognized-selector