2016-02-25 4 views
0

Обновление: Следуя рекомендациям из комментариев, я использую 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.

+0

Какой тип firstAttribute ?, также показывает, как вы вызываете saveData? – Shripada

+0

Вы уверены, что их значения не равны нулю, потому что вы заглянули в базу данных? И если вы используете модель, почему вы не используете сгенерированные классы (StepCount, ActiveEntergy и т. Д.)? – Michael

+0

@Shripada Тип firstAttribute - Integer 16 – Harish

ответ

0

Хорошо, поэтому я думаю, что нашел ответ, который я создавал слишком много экземпляров объекта. Итак, что я в итоге сделал, я создал глобальную константу: let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject) as! FirstEntity. Затем я ссылался на firstEntity всякий раз, когда мне нужно было восстановить или сохранить значение, поэтому у меня не было нескольких экземпляров FirstEntity. Затем я могу получить доступ к значению из любого места.

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