我一直在使用CoreData來處理iOS應用程序,並希望構建幫助函數以將CoreData實體的String
表示形式變爲該實體的NSManagedObject
實例。我剛剛完成了我的第一個Swift課程,根據我的理解,我假設邏輯/實現非常簡單。我相信我的實現是錯誤的,因爲Swift是我最新的編程語言。我試圖避免對解決方案進行硬編碼,因爲我的直覺告訴我有更好,更一般的方法來實現我的目標。CoreData:將字符串轉換爲NSManagedObject實例
例(樸素的僞代碼):
func getEntity(from string: String) -> NSManagedObject {
return string as! NSManagedObject
}
期望的執行:
let stringRep = "Entity"
entity(from: stringRep)
Entity
語境:
我一起工作的CoreData實體中有兩個是Category
和Service
。
public class Category: NSManagedObject { }
public class Service: NSManagedObject { }
Category
包含許多Service
實體的關係,並在AppService
訪問CoreData使用關係我的其他輔助功能。
CategoryTableViewController
有三個靜態單元格,每個靜態單元格包含Category
的實體的String
表示形式。
我期間prepare(for segue: UIStoryboardSegue, sender: Any?)
傳遞一個實體的所選String
表示如Service
到下一UIViewController
用UITableView
。
使用新的幫助函數,我將能夠從CoreData中以String
表示形式不明確地獲取數據,並在UITableView
中顯示數據。
我的最終目標是用下面的函數刪除AppService
中的不必要的函數。
func get(_ entities: String, for category: Category) -> NSFetchedResultsController<T> {
let someEntity = getEntity(from: entities)
let fetchRequest: NSFetchRequest<someEntity> = someEntity.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "category == %@", category)
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]
return createFetchedResultsController(for: fetchRequest)
}
例子:
get("Service", for: category)
你不能這樣做,因爲'String'和'NSManagedObject'是沒有關係的。而'NSManagedObject'不是一個實體。 – vadian
我澄清了它。這就是我爲Swift編寫僞代碼的原因,因爲語言的語義。 –