according to the new Core Data changes, Xcode generates this subclass for me:
extension Person {
@nonobjc public class func fetchRequest() -> NSFetch
Because fetchRequest() is generic for all entity,you can see same method in all your generated extensions , you have to make it specific .
Below line is specific to YourEntity class fetch request method
let fetchRequest: NSFetchRequest<**YourEntity**> = **YourEntity**.fetchRequest()
The reason this is happening is there are two methods named fetchRequest
in your Person
class:
Person
) with return type NSFetchRequest<Person>
NSManagedObject
with return type NSFetchRequest<NSFetchRequestResult>
That's actually why it is ambiguous, compiler does not know which out of 2 you refer to. If you rename func name in your Person+CoreDataProperties
to from fetchRequest
to personFetchRequest
and call by that name - it would compile just like that.
Even better - just add another func to your Person+CoreDataClass
with different name, which would return Person.fetchRequest()
, and you won't need to cast when calling by that name.
The reason is the generic type. NSFetchRequest
has been turned into a generic to avoid a lot of type casting.
If the function doesn't take any parameter so the concrete type (Person
) cannot be passed directly and the return type is also a generic it must be annotated explicitly.