2016-08-15 14 views
2

私はエラーを取得しています:スレッド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)! 

エラーを修正することができません。

+2

私は強く、これらのチュートリアルを避けるだろう:entityForNameは、実際に値を返す場合、あなたはあなたがテストするために、この場合にを結合オプションを使用することができます!

と、この操作の結果を強制的にアンラップので、それはおそらくクラッシュしました'NSFileManager'の' URLForDirectory:appropriateForURL:create: 'ではなくSwiftのネイティブ型(' String'、 'Dictionary')と' NSHomeDictionary() 'ではなくFoundation型(' NSString'、 'NSDictionary')アプリケーションコンテナ内のディレクトリを指定します。 – vadian

+0

'NSBundle'のメソッドを使ってディレクトリの場所を取得するのが正しい方法です。 –

答えて

0

entityForNameはオプションの値を返します。

if let entityDescription = NSEntityDescription.entityForName(className as String, inManagedObjectContext: managedObjectContext) { 
    // work with entityDescription 
} else { 
    // handle the case in which entityForName returns nil 
} 
+0

はい私は強制的に置く! 'NSEntityDescription = NSEntityDescription.entityForName(classNameはString、inManagedObjectContext:managedObjectContext)'の最後にはオプションの型NSEntityDescriptionの値が表示されているので、アンラップされていないし、修正をポップアップ! – Radz

+0

はい、コンパイラはエラー前実行時を見て、瞬間的な解決策を提案します。残念なことに、これらのソリューションは、この場合のように、常に便宜的なわけではありません。 – ff10

+0

はい、このエラーの解決方法を教えてください。解決できません – Radz

関連する問題