【问题标题】:Storing NSDate as an array in CoreData将 NSDate 存储为 CoreData 中的数组
【发布时间】:2015-11-13 21:15:10
【问题描述】:

我正在开发一个需要存储服药时间的应用程序。通过通知操作,我想将服用此药的时间存储在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()
}

【问题讨论】:

    标签: ios arrays swift core-data


    【解决方案1】:

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

    这是一个将数据归档到 Core Data 实体的属性中的示例,其中 myEntityNSManagedObject 引用。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      相关资源
      最近更新 更多