gpt4 book ai didi

iphone - 处理 iPhone 上的错误和异常

转载 作者:行者123 更新时间:2023-12-03 08:08:49 26 4
gpt4 key购买 nike

我正在为 iPhone 开发一个 Core Data 应用程序,我对整个平台等都是新手。

我的问题是,我应该查找和处理多少错误和异常,例如在打开持久存储时。例如,查看“位置”核心数据教程(希望可以像这样在这里引用它):

(对于我的一些问题,请在代码中添加注释)

- (void)applicationDidFinishLaunching:(UIApplication *)application {
...
NSManagedObjectContext *context = [self managedObjectContext];
if (!context) {
// Handle the error. Can this ever happen with this code? (see next comment below)



- (NSManagedObjectContext *) managedObjectContext {
...
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
// it seems even if I get an error or exception down in persistentStoreCoordinator,
// coordinator will still never be nil, or?
if (coordinator != nil) {
managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator: coordinator];
}
return managedObjectContext;
}



- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
...
NSError *error;
// should i have an: if managedObjectModel != nil here?
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] [initWithManagedObjectModel: [self managedObjectModel]];
//need a @try here too?
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {
// Handle error, do what?
}
return persistentStoreCoordinator;
}


- (NSManagedObjectModel *)managedObjectModel {
...
//should have a @try here? But how to handle caught exceptions? Just return nil?
managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
return managedObjectModel;
}

所以问题真的是在哪里寻找错误,在哪里寻找异常,如何以及何时向上传播它们,以及如何以一种好的方式处理 iPhone 上的严重错误?

编辑:在收到对此和我的其他相关问题的一些答案后,我对我试图问的问题有一些澄清:

我现在了解 cocoa 中的异常主要用于查找程序员错误,而不是运行时错误。您是否会在发布应用程序时不包括任何异常处理(如果出于调试原因未添加)?还是我仍然应该进行防御性编程并使用大量@try?

由于 iPhone 应用程序是沙盒化的,用户无法访问文件系统,在设计基于 sqlite 的核心数据应用程序时,应该寻找哪些可能的运行时错误?我的意思是,数据库文件不太可能消失......但也许 future 的升级可能会失败,留下一个旧的无效 sqlite 数据库......有什么好的做法?

此外,像对象分配这样的其他事情可能极不可能失败?在那之前很久你就会收到内存不足的警告......或者......?

而且,考虑到上面示例中的错误和异常处理,什么是好的编程实践,我可以在方法中“深入”地得到一个错误......我应该在那里处理错误还是等到它以某种形式到达顶部(例如一个 nil 对象),还是在链式 react 中处理它们?

以及,如何处理它们?登录到 NSLog 并继续?显示模态信息框并锁定等待用户退出应用程序?还是“错误 xxx,按 OK 退出应用程序”?

而且,有没有办法直接显示模态对话框?我注意到我引发的一些会显示对话框的错误从未显示过,因为应用程序继续运行并随后崩溃......是否有 SHOW NOW 方法?

很多问题,希望您至少有兴趣回答其中的一些问题,并且这可能会引起其他人的兴趣!

Rgds
下午

最佳答案

正如我在对您的其他问题的评论中所说,异常仅由 Cocoa API 用于指示程序员似乎出错的事情 - 数组超出范围,Core Data 数据库具有错误的模式等。错误用于指示用户可能导致发生的事情 - 文件不存在,网络操作未完成等。因此作为粗略的经验法则,在开发过程中寻找异常并将它们作为程序员引入的错误粉碎.准备好处理生产中的错误并从中恢复。

Mac 上一个重要的边缘案例是分布式对象,它使用异常来处理连接的另一端消失或安全验证不成功等情况。

关于iphone - 处理 iPhone 上的错误和异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1224975/

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