Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.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 Sqlite文件为空,但数据可以使用核心数据在模拟器中获取视图_Ios_Swift_Sqlite_Core Data_Swift3 - Fatal编程技术网

Ios Sqlite文件为空,但数据可以使用核心数据在模拟器中获取视图

Ios Sqlite文件为空,但数据可以使用核心数据在模拟器中获取视图,ios,swift,sqlite,core-data,swift3,Ios,Swift,Sqlite,Core Data,Swift3,我尝试在我的应用程序中实现核心数据。我可以在emulator中插入数据和获取数据。我尝试打印数据,但数据不存在。但是当我打开sqlite文件时,数据是空的。它只有表和属性,但没有数据。我使用swift 3 我是JobOrder.swift import Foundation import CoreData public class JobOrder: NSManagedObject { } 这是JobOrder+CoreDataProperties.swift import Foundat

我尝试在我的应用程序中实现核心数据。我可以在emulator中插入数据和获取数据。我尝试打印数据,但数据不存在。但是当我打开sqlite文件时,数据是空的。它只有表和属性,但没有数据。我使用swift 3

我是JobOrder.swift

import Foundation
import CoreData

public class JobOrder: NSManagedObject {

}
这是JobOrder+CoreDataProperties.swift

import Foundation
import CoreData

extension JobOrder {

@nonobjc public class func fetchRequest() -> NSFetchRequest<JobOrder> {
    return NSFetchRequest<JobOrder>(entityName: "JobOrder");
}

@NSManaged public var body: String?
@NSManaged public var id: Int64
@NSManaged public var orderID: Int64

 }
这就是我获取数据的方式

func fetch(){
    let personFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "JobOrder")
    do{
        let fetchPerson = try moc.fetch(personFetch)
        print("bodyName \((fetchPerson.first! as AnyObject).body!))")
    }
    catch {
    }
}

我在日志中也有错误

CoreData: warning: Unable to load class named 'JobOrder' for entity 'JobOrder'.  Class not found, using default NSManagedObject instead.

进一步的讨论产生了一个关于如何使用Swift 3.0在CoreData中关闭WAL模式的问题。因此,我在这里添加了必要的代码作为答案,以便其他人也能从中受益:

let dict = [NSSQLitePragmasOption: ["journal_mode":"DELETE"]]
do {
    try coordinator.addPersistentStore(ofType:NSSQLiteStoreType, configurationName:nil, at:url, options:dict)
} catch {
    // Report error
    abort()
}

在上面的例子中,
coordinator
是一个
NSPersistentStoreCoordinator
实例,
url
是一个
url
实例,指向持久存储的位置。

从哪里获取SQLite文件,检查它是否有数据?您是否找到了模拟器数据的位置,并从模拟器的文档文件夹中获取了应用程序的SQLite?如果是,你确定你有正确的文件夹位置吗?我把这段代码放在URL=FileManager.default.URL(对于:.documentDirectory,在:.userDomainMask中)打印(“URLhere(URL[URL.count-1]作为URL)”)。我输入了appdelegate,然后得到了路径。然后打开并在文件夹中放置modeldb.sqlite、modeldb.sqlite shm、modeldb.sqlite wal。。Have 3 file..您正在查看正确的文件,但我认为问题在于您只是查看sqlite文件,而没有考虑WAL(写前日志)文件。请参阅此线程—基本上,如果数据以代码形式出现—数据确实存在于文件中,但它位于WAL文件中。您需要一个SQLite浏览器,它了解WAL文件并可以浏览该文件。或者,您必须等待数据从WAL文件传输到SQLite数据库。希望这有意义?很高兴听到它起作用:)有时候简单的解决方案是最好的:p
CoreData: warning: Unable to load class named 'JobOrder' for entity 'JobOrder'.  Class not found, using default NSManagedObject instead.
let dict = [NSSQLitePragmasOption: ["journal_mode":"DELETE"]]
do {
    try coordinator.addPersistentStore(ofType:NSSQLiteStoreType, configurationName:nil, at:url, options:dict)
} catch {
    // Report error
    abort()
}