2016-03-17 2 views
0

У меня есть следующий код, чтобы вернуть несколько дат, как NSDateSwift/как получить основные записи данных с помощью valueForKey

func setUpDays() { 

     var datesArray = [String]() 
     datesArray.append("28.03.2016") 
     datesArray.append("26.03.2016") 
     datesArray.append("27.03.2016")  

     for i in 0...datesArray.count-1 { 

      let dates2Convert = datesArray[i] 

      let dateFormatter = NSDateFormatter() 
      dateFormatter.dateFormat = "dd.MM.yyyy" 
      let day = dateFormatter.dateFromString(dates2Convert) 

      print(day) 
     } 
    } 

Это работает отлично. Теперь я хочу, чтобы получить эти даты из основных данных вместо datesArray

var dates = [NSManagedObject]() 

    func setUpDays() { 

     for i in 0...2 { 

      let currentDates = dates[i] 
      let date2Convert = currentDates.valueForKey("date") as? String 

      let dateFormatter = NSDateFormatter() 
      dateFormatter.dateFormat = "dd.MM.yyyy" 
      let day = dateFormatter.dateFromString(date2Convert) 

      print(day) 
     } 
    } 

Но let currentDates = dates[i] коды метательных следующего исключения:

enter image description here

Дата: правильно сохраняется в основных данных. Если я напечатаю их, они верны. Что мне не хватает? Помощь очень ценится.

В соответствии с запросом: так как основные данные заполняются строкой даты.

func parser(parser: NSXMLParser, foundCharacters string: String) { 

let str = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) 

if parsedElement == "eventDates" && str != "" { 
    if currentEvent.eventDates.isEmpty { 

     currentEvent.eventDates = str 
     parsedElement = "" 

     let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
     let managedContext = appDelegate.managedObjectContext 
     let entity = NSEntityDescription.entityForName("Calendar", inManagedObjectContext:managedContext) 
     let datum = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext) 
     datum.setValue(currentEvent.eventDates, forKey: "date") 

     do { 
      try managedContext.save() 
      //5 

      dates.append(datum) 
     } catch let error as NSError { 
      print("Could not save \(error), \(error.userInfo)") 
     } 
    } 
} 
} 
+0

Ну ... «даты» кажутся нулевыми или пустыми. Я думаю :-) Можете ли вы показать, где/как вы объявляете массив 'date'? – pbodsk

+0

что такое 'currentDates'? звук как массив, потому что вы назвали его во множественном числе. Если он предназначен для одного экземпляра, он должен быть 'currentDate'. Когда вы проверяете' date [] 'это массив String или массив объектов CoreData? – Russell

+0

'date = [NSManagedObject]()' –

ответ

2

Как можно видеть в длительной беседе, проблема заключалась в том, что dates был инициализирован и попытался получить доступ в viewDidLoad(). Однако он еще не был заполнен, как это произошло в методе анализа XML.

Чтобы сделать его более безопасным аварии этот цикл

for i in 0...2 { 
    let currentDates = dates[i] 
    let date2Convert = currentDates.valueForKey("date") as? String 

    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "dd.MM.yyyy" 
    let day = dateFormatter.dateFromString(date2Convert) 

    print(day) 
} 

был заменен на этой петле

dates.forEach { currentDate in 
    let date2Convert = currentDate.valueForKey("date") as? String 

    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "dd.MM.yyyy" 
    let day = dateFormatter.dateFromString(date2Convert) 

    print(day) 
} 

И тогда метод setupDates() был вызван после того, как синтаксический закончилась.

+0

еще раз спасибо за вашу удивительную помощь и высокие усилия! –

+0

Добро пожаловать, просто рад, что смог помочь кому-то, когда они застряли – pbodsk

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