【问题标题】:How do I use this fetchRequest() in Swift?如何在 Swift 中使用这个 fetchRequest()?
【发布时间】:2019-07-01 15:34:34
【问题描述】:

我是swift 的新手。我正在尝试创建一个核心数据 NSManagedObject 类,就像我以前在 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 类后,我看到 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?

现在我想创建我的类countryByName 函数。第一行应该有

let fetchRequest = NSFetchRequest(entityName: "Countries") 

fetchRequest() 已经创建。

我该如何使用它?

它不会让我使用

let request = Countries.fetchRequest()

给我一​​个错误Ambiguous use of fetchRequest)=

【问题讨论】:

    标签: swift core-data nsmanagedobject


    【解决方案1】:

    您在 fetchRequest() 声明中使用了两个不同的实体 CountriesAtributos。那确实模棱两可。实体必须是唯一的。

    @nonobjc public class func fetchRequest() -> NSFetchRequest<Countries> {
        return NSFetchRequest<Countries>(entityName: "Countries")
    }
    

    你必须使用它

    let fetchRequest : NSFetchRequest<Countries> = Countries.fetchRequest()
    

    注意:强烈建议以单数形式命名实体。从语义上讲,每条记录代表一个Country,而不是一个Countries。只有一对多关系应该以复数形式命名。

    【讨论】:

    • Atributos 感到抱歉。当我在这里复制课程时,这是一个错字。更改为单数提示。谢谢
    • 或者干脆return .init(entityName: "Countries")
    【解决方案2】:

    获取请求是泛型的,因此您必须指定类型,如下所示:

    let request: NSFetchRequest<Countries> = Countries.fetchRequest()
    

    【讨论】:

    • 你的意思是NSFetchRequest&lt;Countries&gt;
    • 是的,抱歉,只是习惯于将托管对象命名为单数。固定。
    猜你喜欢
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 2021-06-28
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多