Получить сохраненные данные с помощью Core Data

avatar
user9606220
8 апреля 2018 в 02:49
60
1
2

В приведенном ниже коде я могу хранить данные, используя Core Data. Данные, которые я храню, — это награда. Как получить эти данные о наградах из Core Data? Как мне получить общее вознаграждение в моих основных данных каждый раз, когда есть вознаграждение, которое было добавлено для этого определенного пользователя? Я использую loggedInUserHouseNumber для каждого пользователя. Как получить данные о вознаграждении и общее вознаграждение, равное этому loggedInUserHouseNumber? . Я хочу получить все данные и общее вознаграждение, равное этому номеру дома пользователя, вошедшего в систему. Кто-нибудь может дать ответ?

 loggedInUserHouseNumber =  (UserDefaults.standard.value(forKey: "loggedInUserHouseNumber")  as! String)

код запроса на выборку

let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let context = appDelegate.persistentContainer.viewContext
        let request = NSFetchRequest<NSFetchRequestResult>(entityName: "GroceryItem")
        request.returnsObjectsAsFaults = false


self.saveReward(reward: rewardInt)

Сохранение кода данных:

func saveReward(reward: Int64){
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    let groceryData = GroceryItem(context: context) // Link GroceryItem & Context
    groceryData.reward = reward
    groceryData.isSelected = false
    groceryData.houseNo = loggedInUserHouseNumber
    //        print("data:", groceryItem.name)
    print("ang reward nga na save: ", groceryData.reward)
    print("jelordrey")
    (UIApplication.shared.delegate as! AppDelegate).saveContext()
}
Источник
Razib Mollick
8 апреля 2018 в 03:23
0

Вы пытались использовать NSFetchRequest?

user9606220
8 апреля 2018 в 03:33
0

да, я пробовал, сэр

Razib Mollick
8 апреля 2018 в 03:37
0

Не могли бы вы опубликовать свой метод извлечения здесь?

user9606220
8 апреля 2018 в 03:45
0

я обновил свой вопрос выше, пожалуйста, смотрите

Ответы (1)

avatar
Razib Mollick
8 апреля 2018 в 04:10
1

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

let loggedInUserHouseNumber =  (UserDefaults.standard.value(forKey: "loggedInUserHouseNumber")  as! String)
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "GroceryItem")
//Create query 
request.predicate = NSPredicate(format: "houseNo = %@", loggedInUserHouseNumber ?? "")
 do {

       if let models = try context.fetch(request) as? [GroceryItem] {
        // You will get count 
        let count = models.count
        var total = 0
         for model in models {
            total = total + model. reward
       }

    }
   } catch let error {
        // Handle error
    }
user9606220
8 апреля 2018 в 04:14
0

как насчет того, чтобы получить общее количество наград, сэр? , например, я добавил награду, которая равна 10, а затем добавил снова, как я могу получить общую сумму?

user9606220
8 апреля 2018 в 04:17
0

at line guard let model ..... возникает ошибка. Ошибки, выброшенные отсюда, не обрабатываются

Razib Mollick
8 апреля 2018 в 04:28
0

Проверьте обновленный код на наличие ошибки. Когда вы получите все записи (здесь модели) для этого пользователя, теперь вам нужно зациклиться и добавить вознаграждение.

user9606220
8 апреля 2018 в 04:31
0

награда уже сохранена для этого пользователя, когда saveReward . как получить общую сумму вознаграждения? например, я добавляю 10, затем я добавляю еще одну награду, которая равна 20, как теперь получить ее общую сумму?

user9606220
8 апреля 2018 в 04:32
0

также ошибка в использовании неразрешенного идентификатора 'fetcher'

user9606220
8 апреля 2018 в 04:34
0

я исправил ошибку выше, сэр, теперь единственное, что я хочу знать, это как получить всю сумму вознаграждения

Razib Mollick
8 апреля 2018 в 04:35
0

Замените «выборщик» на «запрос», зациклите модели и подсчитайте общее количество.

user9606220
8 апреля 2018 в 04:36
0

Тема 1: Неустранимая ошибка: неожиданно найдено nil при распаковке в строке let models = try context.fetch(request) as? [Бакалея]

Razib Mollick
8 апреля 2018 в 04:46
0

это означает, что ваш запрос не имеет записи. установите точку останова отладки и проверьте в консоли.

user9606220
8 апреля 2018 в 04:53
0

что вы имеете в виду, какую запись запроса у меня нет? я был в точке останова, я смог получить loggsedhouseno

user9606220
8 апреля 2018 в 05:18
0

Инициализатор для условной привязки должен иметь необязательный тип, а не 'NSFetchRequest<NSFetchRequestResult>' в строке, если let request = request {

Razib Mollick
8 апреля 2018 в 05:25
0

Давайте продолжим обсуждение в чате.