gpt4 book ai didi

ios - 使用同一对象 NSNotificationCenter 释放调用两次

转载 作者:行者123 更新时间:2023-11-29 03:15:07 24 4
gpt4 key购买 nike

我想将 View A 中的对象传递给 View B,这是行得通的,但是当我重复此方法时,我发生了崩溃(线程 1:EXC_BREAKPOINT)。

我在我的 View B 中初始化为:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hotSpotMore:) name:@"HotSpotTouched" object:nil];
}
return self;
}


- (void)hotSpotMore:(NSNotification *)notification {

self.articleVC = [[ArticlesVC alloc] init];
self.articleVC=[notification.userInfo objectForKey:@"Art"]; // ERROR LINE


}

在我看来 A 是:

        NSDictionary *myDictionary=[NSDictionary dictionaryWithObject:articles forKey:@"Art"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"HotSpotTouched" object:self userInfo:myDictionary];

我在实例变量中恢复了我的对象,前两次,这是有效的,在发生崩溃之后。

输出:ArticlesVC setArticleVC:]: 消息发送到释放实例 0x44883f10

在我的 Zombie 乐器中我有这个错误:Objective-C 消息被发送到地址为 0xc2d0710 的已解除分配的“ArticlesVC”对象(僵尸)。 

我的问题是方法 dealloc 被调用了两次并且我有一个 Zombie 因为我的“RefCt”设置为“-1”,我不明白为什么这个方法被调用两次。我该如何解决?

最佳答案

您的 viewB 已经被释放,但是 viewA 发送对象给 viewB,它已经不存在了。将 removeObserver 添加到 dealloc 中:

- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}

关于ios - 使用同一对象 NSNotificationCenter 释放调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21778256/

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