0

我正在使用Encrypted Core Data并希望在初始化时出现错误。标Objective C头声明:

+(NSPersistentStoreCoordinator *)makeStoreWithStructOptions:(EncryptedStoreOptions *) options managedObjectModel:(NSManagedObjectModel *)objModel error:(NSError * __autoreleasing*)error;

但是,Swift 桥接头将其解释为:

public class func makeStoreWithStructOptions(options: UnsafeMutablePointer<EncryptedStoreOptions>, managedObjectModel objModel: NSManagedObjectModel!, error: ()) throws -> NSPersistentStoreCoordinator

请注意,它请求的是类型的对象()而不是NSError.

我试图这样做:

var error: NSError? = nil
EncryptedStore.makeStoreWithOptions(options, managedObjectModel: myModel, error: &error)

但这会导致错误提示类型不正确(并且不能使用&

如果我改为尝试(哈哈!)这种语法,使用空闭包作为其奇怪请求的占位符:

do {
      try EncryptedStore.makeStoreWithOptions(options, managedObjectModel: myModel, error: {}())
    }catch{
      print(error)
    }

它可以编译,但是当生成错误时,它不会被捕获,尽管 ECD 确实为我记录了错误(但这没有帮助)。尝试, error: {}()从函数调用中消除会返回一个警告,该函数现在不会抛出,这仍然对我没有帮助。

产生错误的 Objective C 代码是:

[persistentCoordinator addPersistentStoreWithType:EncryptedStoreType configuration:nil URL:databaseURL
        options:options error:error];

if (*error)
{
    NSLog(@"Unable to add persistent store.");
    NSLog(@"Error: %@\n%@\n%@", *error, [*error userInfo], [*error localizedDescription]);
}

return persistentCoordinator;

在这种情况下捕获错误的正确语法是什么?

4

0 回答 0