我为iPhone developinga核心数据应用程序,我是新来整个平台等。
我的问题是,我应该多少寻找和开拓持久性存储时处理错误和异常,例如。 纵观“位置”核心数据教程例如(希望其确定在这里这样引用它):
(SE代码中的注释为我的一些conserns的)
- (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上的严重错误?
编辑:得到了一些答案,这和我的其他相关的问题后,我有什么,我尝试着问一些clearifications:
我现在明白了可可的例外是主要用于寻找程序员错误,而不是运行时错误。 你会去尽量出货应用程序时(如果不是为了调试原因加)不包括任何异常处理? 或者我应该还是防守编程和使用大量@try的呢?
由于iPhone应用程序的沙盒,并且用户不能得到文件系统,有什么可能的运行时错误是聪明的寻找设计源码基于核心数据的应用程序时? 我的意思是,数据库文件是不可能disapear ....但也许将来的升级可能会失败留下一个老无效SQLite数据库....有什么好的做法?
此外,其他像对象页头是probaly极不可能会失败? 这种情况发生之前,你会得到一个内存不足警告长时间....还是...?
而且,什么是良好的编程习惯考虑在上面的例子中,在那里我能得到一个错误“深处”的方法错误和异常处理......我应该处理错误那里或等待,直到它达到某种形式的顶部(例如nil对象),或者处理它们所有的连锁反应?
而且,如何处理? 记录到的NSLog去吗? 显示一个模式信息框并锁定等待用户退出应用程序? 或“Error XXX,按确定退出应用程序”?
而且,有没有办法直接显示一个模式对话框? 我注意到一些错误,我挑衅,将显示一个对话框,从来没有发现因为应用程序不断,后来坠毁....是有一个SHOW NOW方法?
问题很多,希望大家有兴趣回答,至少他们中的一些,而这可能是感兴趣的人!
RGDS PM