如何在Swift中使用此fetchRequest()?

时间:2019-07-01 15:34:34

标签: swift core-data nsmanagedobject

我是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)=

2 个答案:

答案 0 :(得分:2)

您在 class ApiAdminController extends Controller { /** * @Route("/api/admin/parametre") * @Method("GET") */ public function getParametreAction(Request $request){ return JsonResponse([ new Specialite("chirurgie"), new Specialite("oncologie"), ]); } } 声明中使用了两个不同的实体CountriesAtributos。那确实是模棱两可的。该实体必须是唯一的。

fetchRequest()

您必须使用它

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

注意:强烈建议以单数形式命名实体。语义上,每条记录代表一个let fetchRequest : NSFetchRequest<Countries> = Countries.fetchRequest() 而不是一个Country。应该只将多个关系命名为复数形式。

答案 1 :(得分:1)

获取请求是通用的,因此您必须指定类型,例如:

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