私はエラーを取得しています:スレッド1:EXC_BAD_INSTRUCTION(コード= EXC_I386_INVOP、サブコード= 0 * 0)エラー
1:EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP,subcode=0*0)
私はコーディングと私はこのビデオhttps://www.youtube.com/watch?v=Fv-A8lKn7VY
にコードを、次の午前に新しいです以下の通りである:
import UIKit
import CoreData
class SwiftCoreDataHelper: NSObject {
class func directoryForDatabaseFilename()->NSString{
return NSHomeDirectory().stringByAppendingString("/Library/Private Documents")
}
class func databaseFilename()->NSString{
return "database.sqlite";
}
class func managedObjectContext()->NSManagedObjectContext{
do { try NSFileManager.defaultManager().createDirectoryAtPath(SwiftCoreDataHelper.directoryForDatabaseFilename() as String, withIntermediateDirectories: true, attributes: nil) }
catch {
print("Error Creating Directory for DB")
}
// NSFileManager.defaultManager().createDirectoryAtPath(SwiftCoreDataHelper.directoryForDatabaseFilename(), withIntermediateDirectories: true, attributes: nil, error: &error)
let path:NSString = "\(SwiftCoreDataHelper.directoryForDatabaseFilename()) + \(SwiftCoreDataHelper.databaseFilename())"
let url:NSURL = NSURL(fileURLWithPath: path as String)
let managedModel:NSManagedObjectModel = NSManagedObjectModel.mergedModelFromBundles(nil)!
let storeCoordinator:NSPersistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: managedModel)
do {
try storeCoordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil)
}
catch {
print("Error: \(error)")
}
let managedObjectContext = NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.MainQueueConcurrencyType)
managedObjectContext.persistentStoreCoordinator = storeCoordinator
return managedObjectContext
}
class func insertManagedObject(className:NSString, managedObjectConect:NSManagedObjectContext)->AnyObject{
let managedObject:NSManagedObject = NSEntityDescription.insertNewObjectForEntityForName(className as String, inManagedObjectContext: managedObjectConect) as NSManagedObject
return managedObject
}
class func saveManagedObjectContext(managedObjectContext:NSManagedObjectContext)->Bool{
do {
try managedObjectContext.save()
return true
} catch _ {
return false
}
}
class func fetchEntities(className:NSString, withPredicate predicate:NSPredicate?, managedObjectContext:NSManagedObjectContext)->NSArray{
let fetchRequest:NSFetchRequest = NSFetchRequest()
let entetyDescription:NSEntityDescription = NSEntityDescription.entityForName(className as String, inManagedObjectContext: managedObjectContext)!
fetchRequest.entity = entetyDescription
if (predicate != nil){
fetchRequest.predicate = predicate!
}
fetchRequest.returnsObjectsAsFaults = false
var items = NSArray()
do { items = try managedObjectContext .executeFetchRequest(fetchRequest)
} catch {
print("Fetch Request Failed")
}
return items
}
}
エラーが生成されたコードである:
let entetyDescription:NSEntityDescription = NSEntityDescription.entityForName(className as String, inManagedObjectContext: managedObjectContext)!
エラーを修正することができません。
私は強く、これらのチュートリアルを避けるだろう:
entityForName
は、実際に値を返す場合、あなたはあなたがテストするために、この場合にを結合オプションを使用することができます!
と、この操作の結果を強制的にアンラップので、それはおそらくクラッシュしました'NSFileManager'の' URLForDirectory:appropriateForURL:create: 'ではなくSwiftのネイティブ型(' String'、 'Dictionary')と' NSHomeDictionary() 'ではなくFoundation型(' NSString'、 'NSDictionary')アプリケーションコンテナ内のディレクトリを指定します。 – vadian
'NSBundle'のメソッドを使ってディレクトリの場所を取得するのが正しい方法です。 –