Pte*_*tyl 5 objective-c gamekit nsnotificationcenter ios game-center
我使用以下代码来发布通知,但它因 EXC_BAD_ACCESS 而崩溃:
[[NSNotificationCenter defaultCenter]postNotificationName:AUTHENTICATED_NOTIFICATION object:nil];
Run Code Online (Sandbox Code Playgroud)
在我的 Constants.h 文件中:
#import <Foundation/Foundation.h>
extern NSString *const PLAYER_ID;
extern NSString *const RANDOM_NUMBER;
extern NSString *const AUTHENTICATED_NOTIFICATION;
extern NSString *const UNAUTHENTICATED_NOTIFICATION;
@interface RIYConstants : NSObject
{
}
@end
Run Code Online (Sandbox Code Playgroud)
在我的 Constants.m 文件中
#import "RIYConstants.h"
NSString *const PLAYER_ID = @"playerId";
NSString *const RANDOM_NUMBER = @"randomNumber";
NSString *const AUTHENTICATED_NOTIFICATION = @"AUTHENTICATED_NOTIFICATION";
NSString *const UNAUTHENTICATED_NOTIFICATION = @"UNAUTHENTICATED_NOTIFICATION";
@implementation RIYConstants
@end
Run Code Online (Sandbox Code Playgroud)
崩溃的方法是游戏中心验证时调用的处理程序:
-(void)authenticatedPlayer:(GKLocalPlayer*)localPlayer
{
[[NSNotificationCenter defaultCenter]postNotificationName:AUTHENTICATED_NOTIFICATION object:nil];
......
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么它会崩溃。每次发布通知时它都不会崩溃(似乎是随机的)。
编辑:只有一个对象注册接收通知。下面是 init 方法和调用的选择器。我认为没有任何事情会导致崩溃。_label 和 _joinGame 都是 SKLabelNodes
-(id)init
{ ...
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(addGameCenterOption) name:AUTHENTICATED_NOTIFICATION object:nil];
...
}
-(void)addGameCenterOption
{
_label.text = @"";
_joinGame.text = @"Start multiplayer game";
_signedIn = YES;
}
Run Code Online (Sandbox Code Playgroud)
编辑:我已经更改了应用程序,以便没有注册对象来观察通知,但它仍然崩溃(随机)。
由于您正在修改 UI 元素,因此请在 addGameCenterOption 的开头添加一个断言,以确保您位于主线程上。另外,在与元素交互之前做一些间接的事情,例如在设置任何属性之前记录它们的类以验证它们是否仍然存在。
如果您设置异常断点(左窗格),Xcode 应该显示导致崩溃的确切行。
| 归档时间: |
|
| 查看次数: |
3521 次 |
| 最近记录: |