Невозможно вызвать значение нефункционального типа 'Entry' при использовании CoreData - PullRequest
0 голосов
/ 13 февраля 2020

функция должна найти запись или создала новую. в последней строке компилятор сообщает, что «Невозможно вызвать значение нефункционального типа« Entry »». Я смотрел онлайн-класс по Стэнфорду, и вот как учитель делает это, но когда я попробовал это с моим проектом, он не создал новую запись и не установил атрибут, что я сделал не так? Спасибо за помощь!

import UIKit
import CoreData

class Entry: NSManagedObject{
class func findOrCreatEntry(matching Entry: Entry, in context: NSManagedObjectContext) throws -> Entry
{
    let request: NSFetchRequest<Entry> = fetchRequest()
    request.predicate = NSPredicate(format: "creatTime = &@", Entry.creatTime! as CVarArg)

    do {
        let matches = try context.fetch(request)
        if matches.count > 0 {
            assert(matches.count == 1, "Entry.findOrCreatEntry -- database inconsistency")
            return matches[0]
        }
    } catch {
        throw error
    }

        let entry = Entry(context: context)
    }
}

1 Ответ

0 голосов
/ 13 февраля 2020

Вы должны вернуть новый созданный Entry экземпляр.

Ваш метод может быть написан немного короче, и, пожалуйста, назовите метки параметров строчными буквами.

class func findOrCreatEntry(matching entry: Entry, in context: NSManagedObjectContext) throws -> Entry
{
    let request: NSFetchRequest<Entry> = Entry.fetchRequest()
    request.predicate = NSPredicate(format: "creatTime = %@", entry.creatTime! as CVarArg)

    if let firstMatch = try context.fetch(request).first {
       return firstMatch 
    } else {
       return Entry(context: context)
    }
}

Какова цель Этот способ? Параметр является существующим Entry экземпляром! На самом деле этот метод полезен только в том случае, если параметром является только дата создания.

И была еще одна опечатка &@ против %@

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...