Swift版本: swift3.0目标iOS版本: 10.0
我尝试为涉及核心数据的函数编写单元测试。所以我要做的第一件事就是用NSPersistentStore类型初始化类变量。
下面是我的class变量代码
class DataProviderTests: XCTestCase {
var storeCoordinator: NSPersistentStoreCoordinator!
var managedObjectContext: NSManagedObjectContext!
var managedObjectModel: NSManagedObjectModel!
var store: NSPersistentStore!
.....
}下面是初始化类变量的设置函数
override func setUp() {
super.setUp()
managedObjectModel = NSManagedObjectModel.mergedModelFromBundles(nil)
storeCoordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel)
do{
try store = storeCoordinator.addPersistentStoreWithType(NSInMemoryStoreType, configuration: nil, URL: nil, options: nil)
}catch let error as NSError{
print(error)
store = nil
}
.....
}但问题是Xcode一直抱怨这个类没有初始化器。
Swift Compiler Error: Class 'DataProviderTests' has no initializers我发现'store‘变量没有正确初始化。
但是addPersistanteStoreWithtype()函数会抛出错误,我应该使用try和catch子句。但是它导致了这个问题..
初始化存储类变量的最佳方式是什么来解决这个问题?
谢谢你的帮助
发布于 2017-01-13 01:05:21
下面是一个适用于我的try - catch执行示例:
func getDocumentsURL() -> URL {
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
return documentsURL
}
var modelUrl: URL? // This would be the unique URL for your data model
let storeUrl:URL = getDocumentsURL().appendingPathComponent("<YOURNAME.sqlite>") // Make sure to update with your project name or whatever your sqlite filename is
var persistentStoreCoordinator: NSPersistentStoreCoordinator!
var store: NSPersistentStore!
var error: Error? // Use to handle error in case of failure
if let modelAtUrl = NSManagedObjectModel(contentsOf: modelUrl) {
managedObjectModel = modelAtUrl
persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel)
let options = [
NSMigratePersistentStoresAutomaticallyOption: true,
NSInferMappingModelAutomaticallyOption: true
]
managedObjectContext = NSManagedObjectContext(concurrencyType: concurrencyType)
managedObjectContext.persistentStoreCoordinator = persistentStoreCoordinator
do {
try store = self.persistentStoreCoordinator.addPersistentStore(ofType: NSInMemoryStoreType, configurationName: nil, at: storeUrl, options: options)
} catch let error as Error {
print("Unable to initialize persistent store coordinator:", error)
self.error = error
} catch {
fatalError()
}
} else {
fatalError("Error initializing managed object model from URL: \(modelUrl)")
}https://stackoverflow.com/questions/41618771
复制相似问题