Swift /如何通过valueForKey获取核心数据条目

时间:2016-03-17 13:11:58

标签: ios swift

我有以下代码将多个日期作为NSDate

返回
    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)")
        }
    }
}
}

1 个答案:

答案 0 :(得分: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()方法。