Использование базовых данных для увеличения счетчика объекта (Twitter CS193p)

Я заканчиваю курс CS193 в Стэнфорде и использую Core Data для хранения твитов как часть клиента Twitter.

Однако, когда я нахожу существующее хеш-упоминание, я хочу увеличить значение hash.count, представляющее, сколько совпадений у меня есть, но независимо от того, сколько совпадающих хэш-упоминаний есть, hash.count всегда хранит только 0 или 2 (т.е. атрибут не функционирует как постоянное хранилище на объекте).

class HashMention: NSManagedObject {
static func findOrCreateHashMention(matching twitterInfo: Twitter.Mention, in context: NSManagedObjectContext) throws -> HashMention
{
    let hash = HashMention (context: context)
    let request : NSFetchRequest<HashMention> = HashMention.fetchRequest()
    request.predicate = NSPredicate(format: "text =[cd] %@", twitterInfo.keyword)
    do {
        let matches = try context.fetch(request)
        if matches.count > 0 {
            //inc count
            hash.count =  Int32(Int(matches.count) + 1)

            return hash
        }
        else{
            hash.count = 0
            print("zero hash:", twitterInfo.keyword)
            hash.text = twitterInfo.keyword.lowercased()
            return hash
        }
    }
    catch{
        //makes this function throw
        throw error
    }
}
}

person stevenpcurtis    schedule 19.04.2017    source источник
comment
Вы вызываете сохранение контекста в какой-то момент?   -  person ghostatron    schedule 19.04.2017
comment
Нет. Когда будет подходящее время для этого?   -  person stevenpcurtis    schedule 19.04.2017
comment
Немного зависит от общего сценария, но один вариант может быть сразу после вашего блока if/else (прямо перед тем, как вы покинете предложение do).   -  person ghostatron    schedule 19.04.2017
comment
Хм. Единственный раз, когда это должно иметь значение, это после hash.count = Int32(Int(matches.count) + 1), но я все равно получаю тот же результат.   -  person stevenpcurtis    schedule 19.04.2017


Ответы (1)


Таким образом, нужно было изменить само совпадение, но оно находится в массиве в приведенном выше примере. Поэтому ответ был следующим:

do {
        let matches = try context.fetch(request)
let mention = matches.first
        if matches.count > 0 {
            mention?.count = (mention?.count)! + 1
//.. more code
person stevenpcurtis    schedule 24.04.2017