如何在 coreData iOS 中替换 abort() 函数

Posted

技术标签:

【中文标题】如何在 coreData iOS 中替换 abort() 函数【英文标题】:How to replace abort() function in coreData iOS 【发布时间】:2014-08-06 09:03:16 【问题描述】:

我正在使用 CoreData 应用程序,正如我们所知,在保存实体或从上下文中删除实体时,我们总是会进行此检查

NSError *error;
    if (![context save:&error]) 
        // Replace this implementation with code to handle the error appropriately.
        // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);

    

我的应用程序中的许多地方也有此代码,苹果的评论说 " 用代码替换此实现以适当地处理错误。abort() 导致应用程序生成崩溃日志并终止。你不应在运输应用程序中使用此功能,尽管它可能在开发过程中很有用。

我想不出几件事

1) 向用户显示什么消息?

2) 我应该要求用户向我发送错误报告吗?

3) 我应该使用中止吗?

【问题讨论】:

(1) 由您决定。 (2) 这取决于你。 (3) 根据您自己发表的评论:“您不应该在运输应用程序中使用此功能” 您应该在整个应用程序中实现一致的错误处理。你如何做到这一点取决于你。一种常见的方法是实现错误响应链。 developer.apple.com/library/mac/documentation/Cocoa/Conceptual/… @quellish 错误响应器仅在 OS X 中可用(这篇文章被标记为 ios 是的,你可以在iOS上实现错误响应链。示例:github.com/kemenaran/ios-presentError 【参考方案1】:

1) 完全由您决定。请务必简单说明存在问题并且无法保存他们的数据。这种情况应该很少见。

2) 也取决于您,但大多数用户不知道该怎么做。如果您在应用程序中实现了将错误通过电子邮件发送给您的逻辑,将会有所帮助。

负责任 3) 绝对不是(“您不应该在运输应用程序中使用此功能”有什么不清楚的地方?)。保存失败不会使您的应用程序无法继续,因为数据仍然在内存中可用。

备选方案 3) 完全由您决定。如果应用审核团队发现它,您将被拒绝。不过,这种保存失败不太可能在开发之外发生。

【讨论】:

好的,那么 borrden,正如你所说,如果我在我的应用程序中实现电子邮件逻辑,并且 id 用户按下取消而不是向我发送电子邮件,那么会发生什么?应用是照常运行还是会崩溃? 我想不出任何好的理由来故意让应用程序崩溃。您应该继续,因为没有发生损坏(保存失败)。我认为它可能会继续失败,但从用户的角度来看,它仍然比崩溃要好。没有什么比突然看到主屏幕更令人震惊的了。

以上是关于如何在 coreData iOS 中替换 abort() 函数的主要内容,如果未能解决你的问题,请参考以下文章

如何删除/替换有序对多 CoreData 关系中的对象?

我如何(或应该?)用嵌套的 managedObjectContext 替换这个 CoreData SwiftUI 应用程序中的 MVVM?

将一个 NSObject 替换为另一个并保存在 coredata 中

如何使用 swift 在 iOS coredata sqlite 中启用 DELETE MODE

Core Data:如何删除和重建数据存储?

如何在 CoreData iOS 谓词构建器中多次传递相同的参数?