這是蘋果官方文檔 Core Data Programming Guide 的渣翻譯。
現(xiàn)在數(shù)據(jù)已經(jīng)存在了Core Data持久化存儲(chǔ)中了,你可以使用一個(gè)NSFetchRequest來訪問已經(jīng)存在的數(shù)據(jù)。這個(gè)Core Data的對(duì)象查詢是這個(gè)框架最強(qiáng)大的特性之一。
查詢NSManagedObject實(shí)例
在這個(gè)例子中,你開始構(gòu)造一個(gè)NSFetchRequest來描述你想要的返回?cái)?shù)據(jù)。這個(gè)例子除了返回的Entity類型,沒有添加其他要求。你可以在MOC上調(diào)用executeFetchRequest:error:,并傳入一個(gè)error指針。
OBJECTIVE-C
NSManagedObjectContext *moc = …;
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"];
NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error:&error];
if (!results) {
DLog(@"Error fetching Employee objects: %@\n%@", [error localizedDescription], [error userInfo]);
abort();
}
SWIFT
let moc = managedObjectContext
let employeesFetch = NSFetchRequest(entityName: "Employee")
do {
let fetchedEmployees = try moc.executeFetchRequest(employeesFetch) as! [AAAEmployeeMO]
} catch {
fatalError("Failed to fetch employees: \(error)")
}
方法executeFetchRequest:error:有兩個(gè)可能的結(jié)果。它會(huì)返回一個(gè)包含了0個(gè)或更多元素的NSArray數(shù)組,或者返回nil。如果返回了nil,你會(huì)從Core Data接收到一個(gè)error并作出應(yīng)對(duì)操作。如果數(shù)組存在,但有可能是空的。空的數(shù)組表示沒有符合條件的記錄。
過濾結(jié)果
真正的查詢對(duì)象靈活性來自于復(fù)雜的查詢請(qǐng)求。首先,你可以添加一個(gè)NSPredicate對(duì)象到查詢請(qǐng)求中來縮小返回結(jié)果的范圍。例如,如果你僅僅需要那些firstName是“Trevor”的Employee,你可以直接添加這些謂語:
OBJECTIVE-C
NSString *firstName = @"Trevor";
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"firstName == %@", firstName]];
SWIFT
let firstName = "Trevor"
fetchRequest.predicate = NSPredicate(format: "firstName == %@", firstName)
除了縮小返回對(duì)象的范圍,你還可以配置這些對(duì)象如何返回。例如,你可以指定Core Data返回NSDictionary,而不是NSManagedObject實(shí)例。更進(jìn)一步,你可以設(shè)置NSFetchRequest那些NSDictionary實(shí)例僅僅Employee上含有的一個(gè)屬性set。
更多關(guān)于NSFetchRequest,可以看這里的類文檔。