2016-05-31 2 views
0

Я пишу кодаЗначения типа 'NSFetchRequest' не имеет ни одного члена 'performFetch'

var fetchRequest: NSFetchRequest = NSFetchRequest(entityName: "Doctor") 
    fetchRequest.predicate = NSPredicate(format: "id != nil") 



let sortDescriptors: [NSSortDescriptor] = [(NSSortDescriptor.init(key: "distance", ascending: true)), (NSSortDescriptor.init(key: "lastname", ascending: true))] 
fetchRequest.sortDescriptors = sortDescriptors 

var error: NSError? = nil 

// показать ошибки Значения типа 'NSFetchRequest' не имеет ни один из членов 'performFetch'

var fetchSuccessful: Bool = fetchRequest.performFetch(error) 
+2

NSFetchRequest действительно не имеет такого метода –

+0

Основные данные сначала сложны, чтобы понять и использовать. Лучше всего завладеть шаблоном, который работает и придерживается этого, пока вы не будете более комфортно относиться к тому, как и почему он структурирован так, как он есть. Всего наилучшего!! – devim1

ответ

0

Вы можете не выполнять запрос выборки без контекста. Если у вас есть экземпляр NSManagedObjectContext, вы можете использовать метод executeFetchRequest(_:) с запросом на выборку. Более того, если у вас есть экземпляр NSFetchedResultsController, инициализированный вашим запросом на выборку, вы можете использовать метод performFetch() этого контроллера. Вы абсолютно необходимо, чтобы прочитать больше документации CoreData https://developer.apple.com/library/watchos/documentation/Cocoa/Conceptual/CoreData/index.html

1

@Magdalena Dziesińska: В своем коде ...

var fetchSuccessful: Bool = fetchRequest.performFetch(error) 

"performFetch" не существует. Чтобы обработать ошибку (обработку ошибок), поместите ее в «инструкцию try-catch-catch», например. после того, как ваш код ...

var fetchRequest: NSFetchRequest = NSFetchRequest(entityName: "Doctor") 
fetchRequest.predicate = NSPredicate(format: "id != nil") 

Пусть sortDescriptors: [NSSortDescriptor] = [(NSSortDescriptor.init (ключ: "расстояние", восходящие: правда)), (NSSortDescriptor.init (ключ: "фамилия", по возрастанию : true))] fetchRequest.sortDescriptors = sortDescriptors

Используйте следующую инструкцию try-try-catch, чтобы поймать любые ошибки и получить запрос на выборку.

do { 
     let results = try context.executeFetchRequest(request) 
    } catch { 
     print("requesting error") 
    } 

нб: запрос, где вы размещаете ваш «fetchRequest»

0

То, что вы ищете, executeFetchRequest(_:) который throws, а не с использованием принимая NSError параметров.

Если последний неблокирующий параметр метода Objective-C имеет тип NSError **, Swift заменяет его ключевым словом throw, чтобы указать, что метод может выдать ошибку. Если параметр ошибки Objective-C также является его первым параметром, Swift пытается упростить имя метода далее, удалив суффикс «WithError» или «AndReturnError», если он есть, из первой части селектора. Если объявлен другой метод с результирующим селектором, имя метода не будет изменено. - Using Swift with Cocoa and Objective-C (Swift 2.2) - Error Handling

Смежные вопросы