1

破損した/非 sqlite が渡されたときに、コア データ エラーを処理する必要があります。

- (NSPersistentStore *)addPersistentStoreWithType:(NSString *)storeType configuration:(NSString *)configuration URL:(NSURL *)storeURL options:(NSDictionary *)options error:(NSError **)error

クラッシュの原因になります。クラッシュはエラーを明確に説明しています

未解決のエラー エラー Domain=NSCocoaErrorDomain Code=259 "The operation could not be completed. (Cocoa error 259.)" UserInfo=0xb925300 {NSUnderlyingException=File at path does not appear to be a SQLite database:

そのような場合にnil値が返されることを前提として、私はそれをそのように処理しました

if (![storeCoordeinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
};

しかし、それでもクラッシュします。このような場合にこのエラーを処理する適切な方法は何ですか。?

4

1 に答える 1

2

try-catch ブロックを使用します。ページの下部にあるhttps://developer.apple.com/library/mac/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/ErrorHandling/ErrorHandling.html

BOOL isValidDatabaseFile = YES;
@try
{
if (![storeCoordeinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) 
{
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
};
}
@catch(NSException *ex)
{
    isValidDatabaseFile = NO;
}
@finally
{
}

次にチェックisValidDatabaseFile

于 2013-09-30T16:46:53.547 に答える