Core Data(Fetching Objects)

现在,你将使用一个NSFetchRequest,来访问在Core Data中持久储存的现有数据。从Core Data中取得现有的数据是NSfetchRequest框架有强大的功能之一。

获取NSManagedObject实例(Fetching NSManagedObject Instances)

在这个例子中,你将创建一个NSFetchRequest,用来描述你想要得到的返回数据 。这个例子不需要对数据(data)添加任何的约束,除了实体(Entity)返回的类型值。然后,你可以通过上下文(NSManagedObjectContext)调用 executeFetchRequest:error:的方法来进入所请求的数据并且还有一个错误的指针(pointer to an error)。

Objective-C

SManagedObjectContext *moc = …;
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"];
 
NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error:&error];
if (!results) {
    NSLog(@"Error fetching Employee objects: %@\n%@", [error localizedDescription], [error userInfo]);
    abort();
}

Swift

let moc = …
let employeesFetch = NSFetchRequest(entityName: "Employee")
 
do {
    let fetchedEmployees = try moc.executeFetchRequest(employeesFetch) as! [EmployeeMO]
} catch {
    fatalError("Failed to fetch employees: \(error)")
}

executeFetchRequest:error:的方法可能有两种结果。要么返回零个或多个对象的数组(NSArray),要么返回nil。如果返回的nil,你会接收到Core Data返回的一个错误(error)信息,并且要对这个错误的信息做出响应(respond)。如果返回的是一个数组(NSArray),那么这个请求返回的数组可能是空的。一个空的数组表示没有找到记录。

过滤结果(Filtering Results)

取得的对象的准确性取决于请求的复杂性。首先,你可以添加一个NSPredicate对象用来缩小返回对象的范围(数量)。例如,如果你像找一个姓Trevor的员工,那么就可以在NSFetchRequest:方法中添加一个谓词(predicate )。

Objective-C

NSString *firstName = @"Trevor";
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"firstName == %@", firstName]];

Swift

let firstName = "Trevor"
fetchRequest.predicate = NSPredicate(format: "firstName == %@", firstName)

除了缩小返回对象的范围外,还可以配置这些返回对象的形式。例如,你可以指示Core Data返回NSDictionary实例代替彻底成形的NSManagedObject实例。此外,你可以配置NSFetchRequest,以便这些NSDictionary实例只包含Entity的可用属性的子集。

更多关于NSFetchRequest的信息,可以点击查看(官方文档)。

你可能感兴趣的:(Core Data(Fetching Objects))