菜鸟教程小白 发表于 2022-12-11 17:16:19

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()-&gt;NSString{
      return NSHomeDirectory().stringByAppendingString(&#34;/Library/Private Documents&#34;)
    }

    class func databaseFilename()-&gt;NSString{
      return &#34;database.sqlite&#34;;
    }

    class func managedObjectContext()-&gt;NSManagedObjectContext{


      do { try NSFileManager.defaultManager().createDirectoryAtPath(SwiftCoreDataHelper.directoryForDatabaseFilename() as String, withIntermediateDirectories: true, attributes: nil) }
      catch {
            print(&#34;Error Creating Directory for DB&#34;)
      }
      //      NSFileManager.defaultManager().createDirectoryAtPath(SwiftCoreDataHelper.directoryForDatabaseFilename(), withIntermediateDirectories: true, attributes: nil, error: &amp;error)

      let path:NSString = &#34;\(SwiftCoreDataHelper.directoryForDatabaseFilename()) + \(SwiftCoreDataHelper.databaseFilename())&#34;

      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(&#34;Error: \(error)&#34;)
            }

      let managedObjectContext = NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.MainQueueConcurrencyType)

      managedObjectContext.persistentStoreCoordinator = storeCoordinator

      return managedObjectContext      
    }

    class func insertManagedObject(className:NSString, managedObjectConect:NSManagedObjectContext)-&gt;AnyObject{

      let managedObject:NSManagedObject = NSEntityDescription.insertNewObjectForEntityForName(className as String, inManagedObjectContext: managedObjectConect) as NSManagedObject

      return managedObject

    }

    class func saveManagedObjectContext(managedObjectContext:NSManagedObjectContext)-&gt;Bool{
      do {
            try managedObjectContext.save()
            return true
      } catch _ {
            return false
      }
    }   

    class func fetchEntities(className:NSString, withPredicate predicate:NSPredicate?, managedObjectContext:NSManagedObjectContext)-&gt;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(&#34;Fetch Request Failed&#34;)
      }
      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]
查看完整版本: ios - 线程 1 :EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP, 子代码=0*0) 错误