我在访问NSManagedObjectContext中的属性时遇到问题。
我创建并创建了“Module”类的子类。 如果我想创建模块,一切都很好。
但如果我想访问“state” - 属性ig got:
2015-10-26 10:05:46.041 StudyGraph[84862:23335247] -[StudyGraph.Module processingState]: unrecognized selector sent to instance 0x7f97d2e3bb00
ManagedObject-亚纲:
import Foundation
import CoreData
enum ModuleState: Int16 {
case Open
case Active
case Done
}
class Module: NSManagedObject {
var moduleState: ModuleState {
get {
return ModuleState(rawValue: processingState)! // Here it stops !!!
}
set {
processingState = newValue.rawValue
}
}
class func create(context: NSManagedObjectContext, title: String) -> Module? {
if let newModule = NSEntityDescription.insertNewObjectForEntityForName("Module", inManagedObjectContext: context) as? Module {
// Set values
newModule.title = title
// Save
do {
try newModule.managedObjectContext?.save()
} catch {
print("Error while saving new Module.")
}
// return
print(newModule)
return newModule
}
return nil
}
func progress() -> Float {
return 0.25
}
}
扩展:
import Foundation
import CoreData
extension Module {
@NSManaged var processingState: Int16
@NSManaged var title: String?
}
调用getter的代码:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCellWithIdentifier("ModuleCell") as? ModuleTableViewCell {
if let cellObject = dataManager.objectAtIndexPath(indexPath) as? Module {
cell.titleLabel?.text = cellObject.title
cell.progressIndicator?.progress = cellObject.progress()
print(cellObject.moduleState)
return cell
}
}
let dummy = UITableViewCell(style: .Default, reuseIdentifier: "DUMMY")
dummy.textLabel?.text = "DUMMY"
return dummy
}
DataManager中的:
func objectAtIndexPath(indexPath: NSIndexPath) -> NSManagedObject? {
if let frc = self.fetchedResultsController {
if let obj = frc.objectAtIndexPath(indexPath) as? NSManagedObject {
return obj
}
}
return nil
}
答案 0 :(得分:0)
对于模型中定义的属性state
,您必须在子类中声明@NSManaged
变量。核心数据隐式地创建了适当的setter和getter。
@NSManaged var state: Int16
并声明第二个变量将枚举值转换为Int16
,反之亦然。
var moduleState: ModuleState {
get {
return ModuleState(rawValue: state)!
}
set {
state = newValue.rawValue
}
}
要避免类型转换,请将枚举类型声明为Int16
enum ModuleState: Int16 { … }
您可以使用变量getModuleState()
moduleState
我还建议将模型中的属性state
声明为非可选