Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 核心数据:数据未存储到数据库(swift)_Ios_Swift_Core Data_Datamodel - Fatal编程技术网

Ios 核心数据:数据未存储到数据库(swift)

Ios 核心数据:数据未存储到数据库(swift),ios,swift,core-data,datamodel,Ios,Swift,Core Data,Datamodel,数据控制器 class DataController { let model = "GoodiesCoreData" private lazy var applicationDocumentsDirectory: NSURL = { let urls = NSFileManager.defaultManager().URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDoma

数据控制器

class DataController {
let model = "GoodiesCoreData"


private lazy var applicationDocumentsDirectory: NSURL = {
    let urls = NSFileManager.defaultManager().URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask)
    return urls[urls.count-1]
}()

// *****
// ***** DocumentDirectory is the recommended place to store users' data *****
// *****



private lazy var managedObjectModel: NSManagedObjectModel = {
    let modelURL = NSBundle.mainBundle().URLForResource(self.model, withExtension: "momd")!
    return NSManagedObjectModel(contentsOfURL: modelURL)!
}()


// Store coordinator mediates the object model and the persistent store

private lazy var persistenceStoreCoordinator: NSPersistentStoreCoordinator = {
    let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
    let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent(self.model)

    do {
        let options = [NSMigratePersistentStoresAutomaticallyOption: true]

        try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: options)
    }
    catch {
        fatalError("Error adding persistence store")
    }

    return coordinator
}()


lazy var managedObjectContext: NSManagedObjectContext = {
    var context = NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.MainQueueConcurrencyType)
    context.persistentStoreCoordinator = self.persistenceStoreCoordinator
    return context
}()


func saveContext() {
    if managedObjectContext.hasChanges {
        do {
            try managedObjectContext.save()
        }
        catch {
            print("Error saving context")
            abort()
        }
    }
}
}
我的实体

插入功能

func uploadToCoreData() {
    for goodies in datas{ //4 datas
        let moc = DataController().managedObjectContext
        let corePhoto = NSEntityDescription.insertNewObjectForEntityForName("Photo", inManagedObjectContext: moc) as! Photo

        let image = UIImageJPEGRepresentation(goodies.croppedPhoto!, 1)
        corePhoto.photo = image
        corePhoto.qty = goodies.value

        let coreUser = NSEntityDescription.insertNewObjectForEntityForName("User", inManagedObjectContext: moc) as! User
        coreUser.userId = userId

        let coreCart = NSEntityDescription.insertNewObjectForEntityForName("Cart", inManagedObjectContext: moc) as! Cart
        coreCart.cartId = cartId
        coreCart.productName = productName
        coreCart.price = price
        coreCart.quantity = quantity
        coreCart.cartToUser = coreUser

        corePhoto.photoToCart = coreCart

        print(corePhoto.qty)

    }

    DataController().saveContext()

    let request = NSFetchRequest(entityName: "Photo")
    let photoCount = DataController().managedObjectContext.countForFetchRequest(request, error: NSErrorPointer.init())


    print("total photo: \(photoCount)")


}

我正在尝试使用
uploadToCoreData()
函数插入数据。这看起来还可以,因为当我使用它时,它不会打印“错误保存上下文”,但当我获取数据时,它会打印“total photo:0”,它应该是4。我缺少什么?

您正在创建多个
DataController的实例,请不要这样做

我建议使用singleton类来确保始终访问相同的核心数据堆栈组件

将其添加到
DataController

class var sharedController : DataController {
  struct Singleton {
    static let instance = DataController()
 }
    return Singleton.instance
 }
然后将
uploadToCoreData()
更改为

func uploadToCoreData() {
    let dataController = DataController.sharedController
    let moc = dataController.managedObjectContext
    for goodies in datas{ //4 datas

        let corePhoto = NSEntityDescription.insertNewObjectForEntityForName("Photo", inManagedObjectContext: moc) as! Photo

        let image = UIImageJPEGRepresentation(goodies.croppedPhoto!, 1)
        corePhoto.photo = image
        corePhoto.qty = goodies.value

        let coreUser = NSEntityDescription.insertNewObjectForEntityForName("User", inManagedObjectContext: moc) as! User
        coreUser.userId = userId

        let coreCart = NSEntityDescription.insertNewObjectForEntityForName("Cart", inManagedObjectContext: moc) as! Cart
        coreCart.cartId = cartId
        coreCart.productName = productName
        coreCart.price = price
        coreCart.quantity = quantity
        coreCart.cartToUser = coreUser

        corePhoto.photoToCart = coreCart

        print(corePhoto.qty)

    }

    dataController.saveContext()

    let request = NSFetchRequest(entityName: "Photo")
    let photoCount = moc.countForFetchRequest(request, error: NSErrorPointer.init())

    print("total photo: \(photoCount)")
}