2017-02-05 2 views
2

Давайте предположим, что я хочу, чтобы извлечь некоторое NSManagedObjects из основных данных и перечислить все результаты:Как получить результаты NSFetchRequest в Swift 3?

let request = NSFetchRequest<NSFetchRequestResult>() 
let entityDesc = NSEntityDescription.entity(forEntityName: "Chapter", in: context) 
request.entity = entityDesc 
do 
{ 
    let result = try context.execute(request) 
} 
catch 
{ 
    print("\(error)") 
} 

Теперь у меня есть объект NSPersistentStoreResult как результат запроса, но я не знаю, что с ним делать , Документация класса пуст:

enter image description here

Как я должен получить управляемые объекты, возвращаемые запросом выборки?

ответ

4

Вы используете fetch метод в NSManagedObjectContext

Сначала создайте выборку запроса, который может быть общим или конкретным:

let fetchRequest : NSFetchRequest<YourObject> = YourObject.fetchRequest 

let fetchRequest : NSFetchRequest<NSFetchRequestResult> = YourObject.fetchRequest 

Тогда принесу:

let results = context.fetch(fetchRequest) 
0

Основываясь на моем чтении заголовка для NSManagedObjectContext, метод execute(), который вы вызываете из Swift, предназначен для запросов, которые af fect только для постоянного хранимого хранилища, не обрабатываясь самим контекстом. Это не имеет большого смысла для запроса на выборку, потому что цель состоит в том, чтобы перенести вещи из постоянного хранилища в контекст.

Вот соответствующий отрывок из файла NSManagedContext заголовка из основных данных:

// Method to pass a request to the store without affecting the contents of the managed object context. 
// Will return an NSPersistentStoreResult which may contain additional information about the result of the action 
// (ie a batch update result may contain the object IDs of the objects that were modified during the update). 
// A request may succeed in some stores and fail in others. In this case, the error will contain information 
// about each individual store failure. 
// Will always reject NSSaveChangesRequests. 
- (nullable __kindof NSPersistentStoreResult *)executeRequest:(NSPersistentStoreRequest*)request error:(NSError **)error API_AVAILABLE(macosx(10.10),ios(8.0)); 
1

Вы можете получить легко:

Предположим, у вас есть фото Entity

let request:NSFetchRequest<Photo> = Photo.fetchRequest() 
/*  OR 
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Photo") 
*/ 
do { 
    photos = try coreDataStack.context.fetch(request) as [Photo] 
    collectionVIew.reloadData() 
    print(photos?.count ?? "No Photo found") 
} catch let error as NSError { 
    print("Error in fetch :\(error)") 
} 
Смежные вопросы