菜鸟教程小白 发表于 2022-12-12 10:16:44

ios - NSNotificationCenter 使我的应用程序崩溃


                                            <p><p>我添加了一个 <code>NSNotificationCenter</code> 观察者,它在两个不同的 ViewController 上调用 2 个同名的选择器。</p>

<p>它可以工作,但是当我运行该应用程序时,它有时会崩溃并显示以下错误消息:</p>

<pre><code>Thread 1: EXC_BAD_ACCESS (code=1, address=0x18)
</code></pre>

<p>或</p>

<pre><code>Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
</code></pre>

<p> <a href="/image/foAEJ.png" rel="noreferrer noopener nofollow"><img src="/image/foAEJ.png" alt="Image"/></a> </p>

<p>有人知道它为什么会崩溃吗?谢谢!</p>

<p>.</p>

<p>我的代码:</p>

<p><strong>fetchFromParse</strong>:</p>

<pre><code>-(void)sendAllStores
{
    [postNotificationName:@&#34;getStoresArrays&#34; object:nil userInfo:self.storesDict];
}
</code></pre>

<p><strong>firstVC.m</strong>:</p>

<pre><code>- (void)viewDidLoad {
    [addObserver:self selector:@selector(getStoresArrays:) name:@&#34;getStoresArrays&#34; object:nil];
}

-(void)getStoresArrays:(NSNotification*)notification
{
    NSLog(@“Working”);
}
</code></pre>

<p><strong>secondVC.m</strong>:</p>

<pre><code>-(void)prepareArrays
{
    [addObserver:self selector:@selector(getStoresArrays:) name:@&#34;getStoresArrays&#34; object:nil];
}
-(void)getStoresArrays:(NSNotification*)notification
{
    NSLog(@“Working”);
}
</code></pre>

<p><strong>AppDelegate.m</strong>:</p>

<pre><code>- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.secVC=[ init];
    ;

    fetchFromParse *fetchFromParseObj=[ init];
    ;

    Return YES;
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><h2>通知崩溃</h2>

<p>通常,如果您尝试关闭 ViewController 而不移除观察者,您可能会看到这种性质的崩溃。因此,帕蒂尔先生提供的部分答案是绝对需要的。您的用例会因删除观察者的位置和方式而异。如果您过早删除它,如果您尝试引用任何相关对象,最终可能会崩溃。</p>

<p>因此,您可能想要删除 <code>self.storesDict</code> 对象,或者至少在使用它之前验证它不是 nil。 </p>

<h2>调试</h2>

<p>这是 <a href="http://www.raywenderlich.com/28289/debugging-ios-apps-in-xcode-4-5" rel="noreferrer noopener nofollow">quick tutorial</a>关于使用 Xcode 进行调试。它适用于旧版本,但它应该让您快速上手。您还可以查看 Apple <a href="https://developer.apple.com/bug-reporting/mac/" rel="noreferrer noopener nofollow">docs</a>有关收集崩溃日志的更多信息。</p>

<h2>日志</h2>

<p>您应该转到报告导航器并复制更多日志,以便我们可以更准确地确定问题的原因。您可以在错误代码之前添加断点,然后逐步解决问题。如果没有别的,请复制调试控制台。 </p>

<p><strong>获取崩溃日志</strong></p>

<p>你可以打开 Xcode 去 Window 菜单选择 Devices。选择您连接的设备 (iPhone/iPad),然后单击查看设备日志按钮。从列表中选择您的应用名称/崩溃日期。将数据复制到问题中。 </p>

<h2>更多信息</h2>

<p>您提供的有关崩溃的信息越多,我们就越有可能为您提供帮助。我怀疑答案是你要么试图访问零的东西,要么没有在正确的时间释放观察者。当您的 View 消失但您没有提供足够的信息以使其明显时,释放观察者可能不合适。 </p>

<p>不同的 ViewController 如何协同工作?您确定是通知导致崩溃吗?在发布通知和每个选择器中放置一个断点,然后调试应用程序直到它崩溃。您将需要确定崩溃之前的条件。如果您在更新问题时告诉我,我会完善此答案。 </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - NSNotificationCenter 使我的应用程序崩溃,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/35039702/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/35039702/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - NSNotificationCenter 使我的应用程序崩溃