将NSDate存储为CoreData中的数组

时间:2015-11-13 21:15:10

标签: ios arrays swift core-data

我正在开发一款需要存储服药时间的应用。通过通知操作,我想在CoreData中存储服用此药的时间。这可以像这样使用它吗?我的实体:

Core Data Attributes

通知行动:

func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forLocalNotification notification: UILocalNotification, completionHandler: () -> Void) {
    if identifier == "remindLater" {

        print("remindLater")
        notification.fireDate = NSDate().dateByAddingTimeInterval(60)
        UIApplication.sharedApplication().scheduleLocalNotification(notification)

    } else if identifier == "takePill" {

        print("Pill taken")

        do {
            let results = try managedObjectContext.executeFetchRequest(fetchRequest)

            for medicine in results {

                medicine.timeArray.append(NSDate())

            }

        } catch let error as NSError {
            print(error.userInfo)
        }


    }

    completionHandler()
}

1 个答案:

答案 0 :(得分:1)

通过将其归档到NSData,可以在Core Data Transformable属性中存储符合NSCoding的任何类型。 因此,您可以将数组存储在Core Data中。

以下是在myEntityNSManagedObject引用的核心数据实体的属性中归档数据的示例。

myEntity.setValue(NSKeyedArchiver.archivedDataWithRootObject(timeArray), 
                  forKey: "timeArray")

一旦您拥有对托管对象的引用(例如从提取请求返回的对象),就可以使用相应的归档操作来检索数据。

let myTimeArray = NSKeyedUnarchiver.unarchiveObjectWithData(
    myNSManagedObject.valueForKey("timeArray") as! NSData)