gpt4 book ai didi

ios - 在 mergeChangesFromContextDidSaveNotification 之后的 NSFetchedResultsController 委托(delegate)方法中的 SIGABRT

转载 作者:行者123 更新时间:2023-12-01 19:16:01 29 4
gpt4 key购买 nike

好消息:

  • 我从服务器下载数据,并通过 Core Data 线程限制保存数据,当后台 MOC 被保存时,主 MOC 被合并。
  • 所有保存操作正常
  • 此外,MOC 的合并没有任何问题

  • 我正在寻找的错误:
  • 当我的带有 NSFetchedResultsController 的 UITableView 处于事件状态(即在屏幕上)并且正在保存时,应用程序崩溃并显示 SIGABRT 将我带到 AppDelegate 中的 mergeChangesFromContextDidSaveNotification 行。
  • 最奇怪的是,当 FRC 的委托(delegate)为 nil 时,或者当它是我的 View Controller 但我没有实现任何 FRC 委托(delegate)方法时,不会发生崩溃并且我没有任何问题.但是当我实现任何委托(delegate)方法(甚至是空的,没有一行代码)时,应用程序会因相同的错误而崩溃。 这意味着这些方法甚至没有被触发,问题不在于这些方法中的代码 .
  • 最奇怪的部分 2 (检查下面的更新 2) : 崩溃发生在 [__NSCFNumber length]: unrecognized selector sent to instance而且我在我的 CoreDataManager 中也没有在我的 AppDelegate 类中调用任何“长度”属性

  • 见证人:控制台
    <CoreDataManager.m:(338)> Saved data from server
    <AppDelegate.m:(352)> Will merge
    <CoreDataManager.m:(338)> Saved data from server
    <AppDelegate.m:(355)> Did merge
    <CoreDataManager.m:(338)> Saved data from server
    <AppDelegate.m:(352)> Will merge
    <AppDelegate.m:(355)> Did merge
    <CoreDataManager.m:(338)> Saved data from server
    <CoreDataManager.m:(338)> Saved data from server
    <CoreDataManager.m:(338)> Saved data from server
    <MyTableViewController.m:(134)> Fetched results controller did fetch
    <CoreDataManager.m:(338)> Saved data from server
    <CoreDataManager.m:(338)> Saved data from server
    <CoreDataManager.m:(338)> Saved data from server
    <AppDelegate.m:(352)> Will merge
    <CoreDataManager.m:(338)> Saved data from server
    [__NSCFNumber length]: unrecognized selector sent to instance 0x13318050

    一些代码 - 合并 MOC
    - (void)managedObjectContextDidSave:(NSNotification *)notification
    {
    NSManagedObjectContext *sender = (NSManagedObjectContext *)[notification object];

    if ((sender != self.managedObjectContext) &&
    (sender.persistentStoreCoordinator == self.managedObjectContext.persistentStoreCoordinator))
    {
    dispatch_async(dispatch_get_main_queue(), ^{
    DebugLog(@"Will merge");
    [self.managedObjectContext mergeChangesFromContextDidSaveNotification:notification];
    DebugLog(@"Did merge");
    });
    }
    }

    更新 1

    根据 Cocoanetics 的提示,我创建了一个 NSNumber 类别来检查谁在调用 length .我得到了您在下面看到的内容,以及 中的崩溃[__NSCFNumber _fastCStringContents:]: 无法识别的选择器发送到实例 .

    enter image description here

    更新 2
    启用僵尸没有帮助=(

    最佳答案

    确保您只观察来自其他 MOC 的通知。如果你保存在那里,这会触发另一个这样的通知,并且你可能会进入一个无限循环,在一次或两次迭代后失败,因为一个对象已被 ARC 释放。

    关于ios - 在 mergeChangesFromContextDidSaveNotification 之后的 NSFetchedResultsController 委托(delegate)方法中的 SIGABRT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13288392/

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