ios - 线程 1 :EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP, 子代码=0*0) 错误
<p><p>我得到了错误:</p>
<blockquote>
<p>1:EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP,subcode=0*0)</p>
</blockquote>
<p>我是编码新手,我正在关注此视频 <a href="https://www.youtube.com/watch?v=Fv-A8lKn7VY" rel="noreferrer noopener nofollow">https://www.youtube.com/watch?v=Fv-A8lKn7VY</a> </p>
<p>代码如下:</p>
<pre><code>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
}
}
</code></pre>
<p>产生错误的代码是:</p>
<pre><code>let entetyDescription:NSEntityDescription = NSEntityDescription.entityForName(className as String, inManagedObjectContext: managedObjectContext)!
</code></pre>
<p>我无法纠正错误。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p><code>entityForName</code> 返回一个可选值。它可能崩溃了,因为您使用 <code>!</code></p> 强制解包此操作的结果
<p>在这种情况下,您可以使用 <strong>可选绑定(bind)</strong> 来测试 <code>entityForName</code> 是否真的返回值:</p>
<pre><code>if let entityDescription = NSEntityDescription.entityForName(className as String, inManagedObjectContext: managedObjectContext) {
// work with entityDescription
} else {
// handle the case in which entityForName returns nil
}
</code></pre></p>
<p style="font-size: 20px;">关于ios - 线程 1 :EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP, 子代码=0*0) 错误,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/38956610/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/38956610/
</a>
</p>
页:
[1]