Обновление: Следуя рекомендациям из комментариев, я использую NSManagedObject Subclassing
. Поэтому мой код совершенно другой, поэтому я переписываю вопрос, чтобы лучше отразить то, что я делаю сейчас.Основные данные возвращаются 0
Так что мой вопрос: Я сохраняю ненулевые значения в Core Data, но когда я получаю значение, я возвращаюсь обратно. Что может быть неправильным?
Итак, давайте притворимся, что у меня есть два объекта с именем FirstEntity, SecondEntity
с двумя атрибутами с именем firstAttribute, secondAttribute
. И так как я создал подкласс NSManagedObject, у меня есть два класса, один из которых называется FirstEntity
, а второй - SecondEntity
. Каждый класс имеет расширение для двух атрибутов (firstAttribute
, secondAttribute
).
Сохранение значения: Так что, когда я сохраняю значение Я хотел бы использовать код по линии:
let number = 100
let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject) as! FirstEntity
firstEntity.firstAttribute = number
Получение значений: Когда я пытаюсь получить значение атрибута в Core Data, я использую такой код:
let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject) as! FirstEntity
print(firstEntity.firstAttribute) // This returns zero when I clearly saved a value of 100 above.
Я довольно новый для Core Data, и я посмотрел много примеров того, как использовать Core Data в Интернете. Я все еще немного смущен тем, что я могу сделать неправильно. Если есть какие-либо разъяснения, требуемые, просто спросите в комментариях, и я обязательно отвечу.
Потенциальные ошибки: Так что я делаю, я пытаюсь сохранить значение атрибутов в completionHandler
функции. Кроме того, если я печатаю значение переменной внутри completionHandler
, я получаю правильное значение атрибута. Например:
someFunction() {
number in // Pretend number is 5000
let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject) as! FirstEntity
firstEntity.firstAttribute = number
print(firstEntity.firstAttribute) // Prints 5000 to the console
}
Однако, скажем я иду, чтобы получить доступ значение firstAttribute
вне completionHandler
и напечатать значение в консоли я получаю значение 0. Например:
class MyClass {
func myFunction() {
let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject) as! FirstEntity
print(firstEntity.firstAttribute) // Prints 0
}
}
Я также хотел упомянуть, что я убеждаюсь, что функция завершенияHandler в функции установила значение firstAttribute перед вызовом myFunction() MyClass.
Какой тип firstAttribute ?, также показывает, как вы вызываете saveData? – Shripada
Вы уверены, что их значения не равны нулю, потому что вы заглянули в базу данных? И если вы используете модель, почему вы не используете сгенерированные классы (StepCount, ActiveEntergy и т. Д.)? – Michael
@Shripada Тип firstAttribute - Integer 16 – Harish