我正在使用核心數據的iOS項目。我正在使用swift。核心數據堆棧設置正確,似乎都很好。 我已經爲實體(NSManagedObject)創建了一個名爲TestEntity的類。 類看起來是這樣的:Swift無法在Xcode測試中測試核心數據?
import UIKit
import CoreData
class TestEntity: NSManagedObject {
@NSManaged var name: NSString
@NSManaged var age: NSNumber
}
所以,後來我嘗試使用這行代碼在代碼中插入一個新的TestEntity:
let te: TestEntity = NSEntityDescription.insertNewObjectForEntityForName("TestEntity", inManagedObjectContext: ctx) as TestEntity
然後我得到這個錯誤:
我已經看到堆棧溢出的一些答案,說我需要擔心模塊名稱。所以後來我看,截至上的文檔: https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/WritingSwiftClassesWithObjective-CBehavior.html
然後,我在覈心數據實體拍得TestEntity並在類字段我進入myAppName.TestEntity
當我運行的應用程序這一行:
let te: TestEntity = NSEntityDescription.insertNewObjectForEntityForName("TestEntity", inManagedObjectContext: ctx) as TestEntity
仍然給我同樣的錯誤。
我還能做什麼錯?
編輯: 所以,我是能夠使應用程序不會改變TestEntity NSManagedObject類了崩潰: 進口的UIKit 進口CoreData
@objc(TestEntity) class TestEntity: NSManagedObject {
@NSManaged var name: NSString
@NSManaged var age: NSNumber
}
所以,我加入了@objc(TestEntity)在裏面。這適用於在覈心數據數據模型檢查器中的TestEntity類名稱之前添加或不添加appName。
這個工作,但是,當我運行測試此行仍然崩潰:
let te: TestEntity = NSEntityDescription.insertNewObjectForEntityForName("TestEntity", inManagedObjectContext: ctx) as TestEntity
所以我發現,這是其他人的問題: How to access Core Data generated Obj-C classes in test targets?
哪有我們獲得了核心數據,可以在swift中進行測試。我沒有在應用程序目標中使用橋接標頭,並且這一切都很好。測試目標仍然崩潰。
如何修復測試目標,以便它可以運行核心數據測試?
試試這個:http://stackoverflow.com/a/26568813/438063 – Lucien
看到一些更多的筆記[在這個SO回答] [1]'加入@objc(ClassName)'的方法。 [1]:http://stackoverflow.com/a/29445352/2466193 –
看到一些更多音符[在該SO回答] [1]的 '加入@objc(類名)' 的方法。 [1]:http://stackoverflow.com/a/29445352/2466193 –