2016-01-22 3 views
0

Я получил 2 сущности:объекта как ошибки - CoreData Отношение

  1. Todo
  2. Даты

Они связаны с обратной зависимостью, так один объект Todo может иметь несколько дат, так Todo обладает свойствами :

@NSManaged var dates: NSSet? 
@NSManaged var name: String? 

и каждый объект Dates может иметь один Todo, поэтому он имеет свойство:

@NSManaged var todo: Todo? 
@NSManaged var wasDone: NSNumber? //It is a boolean 
@NSManaged var date: NSDate? 

Когда я создаю Todo, я вставляю новый объект в имя сущности.

//Saving into local device context 
     guard let ourcontext = self.context else {print("no context");return} 
     guard let newTodo = NSEntityDescription.insertNewObjectForEntityForName("Todo", inManagedObjectContext: ourcontext) as? Todo else {return} 
     let myTodoName = self.addTodoView.searchTextField.text 
     newTodo.name = myTodoName 

Затем рассчитать даты и я хочу, чтобы вставить их в NSSet из Todo (я сделал функцию в Todo:

func addObject(value: Dates) { 
     let dates = self.mutableSetValueForKey("dates") 
     dates.addObject(value) 
    } 

поэтому после вычисления даты и создания «datesArray» из них I хотят, чтобы добавить их к уже упоминалось выше NSSet:

for _ in self.datesArray { 
      guard let newDate = NSEntityDescription.insertNewObjectForEntityForName("MedicineDates", inManagedObjectContext: ourContext) as? MedicineDates else {return} 

      newTodo.addObject(newDate) 

Вот первый вопрос - действительно ли я создать связь между объектами корректно

?

Тогда я хочу, чтобы создать (в cellForRowAtIndexPath, так как это отображается в Tableview) массив из NSSet из Todo:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("MyCell", forIndexPath: indexPath) as! TodoTableViewCell 
     guard let object = fetchedResultsController?.objectAtIndexPath(indexPath) as? Todo else {return cell} 

NSSet к массиву:

let fetchedData = object.dates?.allObjects as! [Dates] 
let datesArray = [NSDate]() 
for object in fetchedData { 
    datesArray.append(object.date!) 
} 

И вот бум. Когда я пытаюсь развязать object.date, он сообщает мне, что «неожиданно нашел nil при распаковке необязательного значения», но я знаю, что fetchedData с объектами типа Date в нем существует.

В чем я ошибался, или я этого не делал?

ответ

0

Ошибка указывает, что в то время как существуют объекты Dates, их атрибут date типа NSDate этого не делает.

Убедитесь, что вы создали объект Dates правильно, установив атрибут date и сохранение контекста.

0

Вы можете использовать типизированный Set вместо так что вы можете сохранить несколько строк кода:

@NSManaged var dates: Set<Dates>? 

Но ошибка указывает на то, что объект типа Dates содержит nil атрибут date. Это связано с тем, что date определен дополнительно и не был инициализирован.

Вы можете определить как необязательный атрибут date в модели данных и установить значение по умолчанию. А затем определите в своем подклассе:

@NSManaged var date: NSDate 
Смежные вопросы