アプリ内に単純なコアデータ機能を実装して、アプリが初めてロードされたときにのみチュートリアル (スクロールページを備えた別のビューコントローラー) を表示し、1 回おきにバイパスするようにしようとしています。Swift 2 の CoreData チュートリアルの構文から始めましたが、途中で見つけたエラー (SIGBRT など) を克服するのに役立つ Swift 3 の自動修正やその他のチュートリアルに基づいて微調整する必要がありました。私が抱えている現在の問題は 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 (code=EXC_1386_INVOP, subcode=0x0)が表示されます。
Xcode 8、ベータ 8 を使用しています。「CoreDataStuf.xcdatamodeld」という名前の迅速なファイルがあり、「Person」という名前のエンティティと、文字列である「tutorialstatus」という属性があります。また、そのエンティティに Person のクラスを与えました。URL CoreDataStuf を参照する DataController.swift ファイルもあります。