executeFetchRequest doesn't return the NSManag

2019-03-25 11:54发布

问题:

This is for XCode 6 and Swift...

I'm trying to make a fetch request to the managed object context but it's not returning the correct subclass.

I have already set the subclass in the data model data modeler configuration to the name of my custom subclass and in the code, it is extending the NSManagedObject class.

Any ideas?

回答1:

Just figured out the solution.

I had to add the @objc attribute to allow the class to be compatible with Objective-C.

Now the fetch request is returning a correct result of Tasks[]

import Foundation
import CoreData

@objc(Task) // make compatible with objective-c
class Task : NSManagedObject
{
    @NSManaged var note: String!
    @NSManaged var completed: Bool
}

Reference: https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html#//apple_ref/doc/uid/TP40014216-CH4-XID_36



回答2:

Using @objc(Task) seems to be working but you could also just edit the data model data modeler configuration to the name ToDoList.Task instead of just Task. That will work too and avoid Class conflicts if Task is used anywhere else in the Objective-C code.



回答3:

Check to make sure that in the "Entity" inspector (right side of the screen, Utilities pane) when Task is selected in your Model that its Class field is properly filled in with "Task" (it's blank by default).



标签: swift xcode6