Ios 简单获取Swift 3核心数据

Ios 简单获取Swift 3核心数据,ios,core-data,fetch,swift3,xcode8-beta6,Ios,Core Data,Fetch,Swift3,Xcode8 Beta6,我一直在尝试在我的应用程序中实现一个简单的核心数据功能,这样它只在应用程序第一次加载时显示一个带有滚动页面的单独视图控制器的教程,并且每隔一次都会绕过它。 我从Swift 2的CoreData教程开始学习语法,但后来不得不根据Swift 3的自动更正和其他教程进行调整,这些教程帮助我克服了在学习过程中发现的错误,如SIGBRT。目前我遇到的问题是EXC_BAD_指令错误,我需要帮助修复 我有一个scrollViewController,代码如下: class ScrollViewControll

我一直在尝试在我的应用程序中实现一个简单的核心数据功能,这样它只在应用程序第一次加载时显示一个带有滚动页面的单独视图控制器的教程,并且每隔一次都会绕过它。 我从Swift 2的CoreData教程开始学习语法,但后来不得不根据Swift 3的自动更正和其他教程进行调整,这些教程帮助我克服了在学习过程中发现的错误,如SIGBRT。目前我遇到的问题是EXC_BAD_指令错误,我需要帮助修复

我有一个scrollViewController,代码如下:

class ScrollViewController: UIViewController, NSFetchedResultsControllerDelegate {

@IBOutlet var mainScrollView: UIScrollView!

@IBOutlet weak var endTutorial: UIButton!

var imageArray = [UIImage]()

class Person: NSManagedObject {
    @NSManaged var tutorialstatus: String?
}

func seed() {
    let moc = DataController().managedObjectContext
    let entityDes = NSEntityDescription.entity(forEntityName: "Person", in: moc)
    let entity = Person(entity: entityDes!, insertInto: moc)
    entity.tutorialstatus="test value"
    do {
        try moc.save()
    } catch {
        fatalError("Failure to save context: \(error)")
    }
}

func fetch() {
    let moc = DataController().managedObjectContext
    let personFetch = NSFetchRequest<Person>(entityName: "Person")


    do {
        let fetchedPerson = try moc.fetch(personFetch)
        print(fetchedPerson.first!.tutorialstatus)

    } catch {
        fatalError("Failed to fetch person: \(error)")
    }
}
在let fetchedPerson=try moc.fetchpersonFetch行,当我尝试编译时,我看到错误EXC_BAD_指令代码=EXC_1386_INVOP,子代码=0x0

我使用的是Xcode 8,Beta 8。 我有一个名为“CoreDataStuf.xcdatamodeld”的swift文件,其中有一个名为Person的实体,该实体具有名为tutorialstatus的属性,该属性是一个字符串。我也给了那个实体一类人。 我还有一个DataController.swift文件,其中引用了URL CoreDataStuf

这就是成功的原因:

let fetchedPerson = try moc.fetch(personFetch as! NSFetchRequest<NSFetchRequestResult>)
这就是成功的原因:

let fetchedPerson = try moc.fetch(personFetch as! NSFetchRequest<NSFetchRequestResult>)

试着在moc环境中这样做

@IBOutlet weak var inValue: UITextField!
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
@IBAction func goBtn(_ sender: UIButton) {
    var inVal = Int(inValue.text!)!
    for i in inVal...inVal + 10 {
     context.perform {
         let nums = NSEntityDescription.insertNewObject(forEntityName: "Numbers", into: self.context) as! Numbers
            let request:NSFetchRequest<Numbers> = Numbers.fetchRequest()
            request.predicate = NSPredicate(format: "nums == %d", i)
            do { let numbers =  try? request.execute()
                if (numbers?.count)! > 0 {
                    print ("Value \(i) alreayd existis")
                } else {
                    nums.nums = Decimal(i) as NSDecimalNumber?
                }
              } catch let error {
                print ("Error while fetching \(error)")
            }
        }

        do {
            try self.context.save()
            print ("Value stored in DB \(i)")
        } catch let error {
            print ("Error while saving \(error)")
        }
    }
}

试着在moc环境中这样做

@IBOutlet weak var inValue: UITextField!
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
@IBAction func goBtn(_ sender: UIButton) {
    var inVal = Int(inValue.text!)!
    for i in inVal...inVal + 10 {
     context.perform {
         let nums = NSEntityDescription.insertNewObject(forEntityName: "Numbers", into: self.context) as! Numbers
            let request:NSFetchRequest<Numbers> = Numbers.fetchRequest()
            request.predicate = NSPredicate(format: "nums == %d", i)
            do { let numbers =  try? request.execute()
                if (numbers?.count)! > 0 {
                    print ("Value \(i) alreayd existis")
                } else {
                    nums.nums = Decimal(i) as NSDecimalNumber?
                }
              } catch let error {
                print ("Error while fetching \(error)")
            }
        }

        do {
            try self.context.save()
            print ("Value stored in DB \(i)")
        } catch let error {
            print ("Error while saving \(error)")
        }
    }
}
尝试:

尝试:


本教程在CoreDate中提供了插入、更新、删除和列表演示:设置一些断点以查看moc和personFetch是否为零。另外,我想你的意思是你在运行时而不是编译时出错?是的,你是对的-我在运行时而不是编译时出错。你的应用程序是基于tableView的?Xcode 8不支持提供给你的获取请求。本教程提供插入、更新、,删除并列出CoreDate中的demo:放入一些断点以查看moc和personFetch是否为零。还有,我想你的意思是你在运行时得到错误,而不是在编译时?是的,你是正确的-我在运行时得到它,而不是编译。你的应用程序基于tableView?Xcode 8不支持你提供的获取请求。仅供参考NSFetchRequest上的execute方法仅在iOS 10+中可用。仅供参考NSFetchRequest上的execute方法仅在iOS 10+中可用。