iOS11 Swift4 CoreData:可以显示新数据但不能添加到数据库中

时间:2017-10-17 06:43:06

标签: ios xcode sqlite core-data

这是我获取数据并重新加载tableView的代码。现在的问题是可以显示新数据,但不能插入数据库。块引号是我的Xcode的输出。

coreData:可选(“huang”)是新数据。

  

CoreData:sql:SELECT 0,t0.Z_PK,t0.Z_OPT,t0.ZINCONSISTENCIES,t0.ZMISSINGHIPERS,t0.ZNAME,t0.ZPES,t0.ZSCORE,t0.ZUPDATEDTIME FROM ZREPORT t0 ORDER BY t0.ZNAME < / p>      

CoreData:annotation:sql connection fetch time:0.0008s

     

CoreData:注释:总获取执行时间:2行0.0010秒。

     

coreData:可选(“huang”)

     

coreData:可选(“test1”)

     

coreData:可选(“test2”)

override func viewDidLoad() {
    super.viewDidLoad()
    print("pwd: \(NSHomeDirectory())")

    let addMoreButton = UIBarButtonItem(image: UIImage.init(named:"navbar_icon_create_default"), style: .done, target: self, action: #selector(createNewReport))
    self.navigationItem.rightBarButtonItem = addMoreButton

    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Report")
    let sortDescriptor = NSSortDescriptor(key: "name", ascending: true)
    fetchRequest.sortDescriptors = [sortDescriptor]

    if let managedObjectContext = (UIApplication.shared.delegate as?
        AppDelegate)?.managedObjectContext {
        fetchResultController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
        fetchResultController.delegate = self

        do {
            try fetchResultController.performFetch()
            reports = fetchResultController.fetchedObjects as! [Report]
            reports.forEach{ entity in
                print("coreData : \(entity.name)")
            }
        } catch {
            print(error)
        }
    }
}

我正在向coredata添加新数据。这是我的测试代码

var reports:[Report] = []
let context = (UIApplication.shared.delegate as? AppDelegate)?.managedObjectContext
let report = NSEntityDescription.entity(forEntityName: "Report", in: context!)
let reportDetail = NSManagedObject(entity: report!, insertInto: context) as! Report
reportDetail.inconsistencies = 3
reportDetail.pes = 4
reportDetail.missingHIPERs = 6
reportDetail.name = "huang"
reportDetail.updatedTime = nil
reportDetail.score = "60"
print("pppp: \(reportDetail.missingHIPERs)")
reports.append(reportDetail)
self.cacheManager.store(reports: reports)

这是我的商店功能代码

func store(reports: [Report]) {
    let context = getContext()

    let entity =  NSEntityDescription.entity(forEntityName: "Report", in:  context)

    reports.forEach { report in
        let reportDetail = NSManagedObject(entity: entity!, insertInto: context) as! Report
        reportDetail.name = report.name
        reportDetail.inconsistencies = report.inconsistencies
        reportDetail.missingHIPERs = report.missingHIPERs
        reportDetail.score = report.score
        reportDetail.pes = report.pes
    }

    do {
        try context.save()
        print("saved")
    }catch{
        print("Could not save the report detail as: \(error)")
    }
}

正如下面的两张图片所示,保存数据的过程似乎有效(打印功能正常)。我的应用程序可以在添加数据后刷新tableView。 另外两个数据是我自己使用sqlite工具手动添加的,它们总能显示。但新数据从未添加到数据库中。我在控制台中打开了sqlite输出。

Xcode Output

Simulator Screenshot

那么,问题是什么?

  1. 我想也许我添加的数据细节不正确,因为当Xcode显示时,所有数据都在'?'形式。

0 个答案:

没有答案