如何在 Swift 中使用此 fetchRequest()?
How do I use this fetchRequest() in Swift?
我是 swift
的新手。我正在尝试创建核心数据 NSManagedObject
class,就像我以前在 Objective-C
.
中所做的那样
在Objective-C中我会创建类似
的东西
+ (Countries *)countryWithName:(NSString *)name
inManagedObjectContext:(NSManagedObjectContext *)context {
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:NSStringFromClass([self class])
inManagedObjectContext:context];
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"(country == %@)", name];
request.predicate = predicate;
return [[context executeFetchRequest:request error:nil] lastObject];
}
所以,任何时候我想在核心数据上按名称获取一个国家,我都会这样做
userCountry = [Countries countryWithName:@"United States" inManagedObjectContext:self.managedObjectContext];
但是在使用 swift 创建 NSManagedObject
class 之后,我看到 Xcode 在 Countries+CoreDataProperties.swift
中创建了这段代码
@nonobjc public class func fetchRequest() -> NSFetchRequest<Countries> {
return NSFetchRequest<Countries>(entityName: "Countries")
}
@NSManaged public var number: Int16
@NSManaged public var name: String?
@NSManaged public var shortcut: NSData?
现在我想创建我的 class countryByName
函数。第一行应该是
let fetchRequest = NSFetchRequest(entityName: "Countries")
但是 fetchRequest()
已经创建了。
我该如何使用它?
不让我用
let request = Countries.fetchRequest()
给我一个错误Ambiguous use of fetchRequest)=
提取请求是通用的,因此您必须指定类型,如下所示:
let request: NSFetchRequest<Countries> = Countries.fetchRequest()
您在 fetchRequest()
声明中使用了两个不同的实体 Countries
和 Atributos
。那确实暧昧。实体必须是唯一的。
@nonobjc public class func fetchRequest() -> NSFetchRequest<Countries> {
return NSFetchRequest<Countries>(entityName: "Countries")
}
而且你必须使用它
let fetchRequest : NSFetchRequest<Countries> = Countries.fetchRequest()
注意:强烈建议以单数形式命名实体。从语义上讲,每条记录代表一条 Country
而不是一条 Countries
。只有 to-many 关系应该以复数形式命名。
我是 swift
的新手。我正在尝试创建核心数据 NSManagedObject
class,就像我以前在 Objective-C
.
在Objective-C中我会创建类似
的东西+ (Countries *)countryWithName:(NSString *)name
inManagedObjectContext:(NSManagedObjectContext *)context {
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:NSStringFromClass([self class])
inManagedObjectContext:context];
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"(country == %@)", name];
request.predicate = predicate;
return [[context executeFetchRequest:request error:nil] lastObject];
}
所以,任何时候我想在核心数据上按名称获取一个国家,我都会这样做
userCountry = [Countries countryWithName:@"United States" inManagedObjectContext:self.managedObjectContext];
但是在使用 swift 创建 NSManagedObject
class 之后,我看到 Xcode 在 Countries+CoreDataProperties.swift
@nonobjc public class func fetchRequest() -> NSFetchRequest<Countries> {
return NSFetchRequest<Countries>(entityName: "Countries")
}
@NSManaged public var number: Int16
@NSManaged public var name: String?
@NSManaged public var shortcut: NSData?
现在我想创建我的 class countryByName
函数。第一行应该是
let fetchRequest = NSFetchRequest(entityName: "Countries")
但是 fetchRequest()
已经创建了。
我该如何使用它?
不让我用
let request = Countries.fetchRequest()
给我一个错误Ambiguous use of fetchRequest)=
提取请求是通用的,因此您必须指定类型,如下所示:
let request: NSFetchRequest<Countries> = Countries.fetchRequest()
您在 fetchRequest()
声明中使用了两个不同的实体 Countries
和 Atributos
。那确实暧昧。实体必须是唯一的。
@nonobjc public class func fetchRequest() -> NSFetchRequest<Countries> {
return NSFetchRequest<Countries>(entityName: "Countries")
}
而且你必须使用它
let fetchRequest : NSFetchRequest<Countries> = Countries.fetchRequest()
注意:强烈建议以单数形式命名实体。从语义上讲,每条记录代表一条 Country
而不是一条 Countries
。只有 to-many 关系应该以复数形式命名。