簡體   English   中英

Swift 3核心數據中的簡單訪存

[英]Simple Fetch in Swift 3 Core Data

我一直在嘗試在我的應用程序中實現一個簡單的核心數據功能,以便僅在應用程序首次加載時才顯示一個教程(帶有滾動頁面的單獨的視圖控制器),而每隔一次便繞開它。 我從Swift 2的CoreData教程的語法開始,但是后來不得不基於Swift 3的自動更正和其他教程進行調整,這些教程幫助我克服了在此過程中發現的錯誤(例如SIGBRT)。 我目前遇到的問題是EXC_BAD_INSTRUCTION錯誤,我需要幫助修復。

我有一個帶有以下代碼的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.fetch(personFetch)行中,當我嘗試編譯時,我看到錯誤EXC_BAD_INSTRUCTION(代碼= EXC_1386_INVOP,子代碼= 0x0)

我正在使用Xcode 8,Beta8。我有一個名為'CoreDataStuf.xcdatamodeld的快速文件,該文件具有一個名為“ Person”的實體,其屬性為tutorialstatus,該屬性是一個字符串。 我還給該實體提供了一類人。 我也有一個DataController.swift文件,其中引用了URL CoreDataStuf。

這是有效的:

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)")
        }
    }
}

嘗試:

    let personFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Person")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM