gpt4 book ai didi

ios - 为什么发布通知会导致崩溃?

转载 作者:可可西里 更新时间:2023-11-01 05:54:57 25 4
gpt4 key购买 nike

我使用以下代码发布通知,但它因 EXC_BAD_ACCESS 而崩溃:

[[NSNotificationCenter defaultCenter]postNotificationName:AUTHENTICATED_NOTIFICATION object:nil];

在我的 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

在我的 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

崩溃的方法是游戏中心验证时调用的处理程序:

-(void)authenticatedPlayer:(GKLocalPlayer*)localPlayer
{
[[NSNotificationCenter defaultCenter]postNotificationName:AUTHENTICATED_NOTIFICATION object:nil];
......
}

我不知道为什么会崩溃。它不会在每次发布通知时崩溃(似乎是随机的)。

编辑:只有一个对象注册接收通知。 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;
}

编辑:我已经更改了应用程序,因此没有注册对象来观察通知,但它仍然(随机)崩溃。

最佳答案

这很可能是注册的观察者造成的,发送通知时观察者已经被释放,但观察者没有注销。

确保所有添加观察者的类:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addGameCenterOption) name:AUTHENTICATED_NOTIFICATION object:nil];

在观察者被释放之前也要移除观察者:

[[NSNotificationCenter defaultCenter] removeObserver:self AUTHENTICATED_NOTIFICATION object:nil];

关于ios - 为什么发布通知会导致崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20047384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com