在 tableview 中显示图像时 managedObjectModel 错误指令

Posted

技术标签:

【中文标题】在 tableview 中显示图像时 managedObjectModel 错误指令【英文标题】:managedObjectModel Bad Instruction when show image in tableview 【发布时间】:2016-04-26 07:59:48 【问题描述】:

我是使用 swift 的新手,在自定义表格视图中显示图像时遇到问题。我从here 获取代码

这是我的核心数据

lazy var managedObjectModel: NSManagedObjectModel = 
    let modelURL = NSBundle.mainBundle().URLForResource("test", withExtension: "momd")! <---- The error in here
    return NSManagedObjectModel(contentsOfURL: modelURL)!
()

这是我在控制器中的代码

func extract_json(jsonData:NSData) 
        let json: AnyObject?
        do 
            json = try NSJSONSerialization.JSONObjectWithData(jsonData, options: [])
         catch 
            json = nil
            return
        

        if let list = json as? NSArray 
            for (var i = 0; i < list.count ; i++ ) 
                if let data_block = list[i] as? NSDictionary 
                    TableData.append(datastruct(add: data_block))
                
            

            do 
                try read()
             catch 
            do_table_refresh()
        
    

    func do_table_refresh() 
        dispatch_async(dispatch_get_main_queue(), 
            self.tableview.reloadData()
            //self.activityView.hidden = true
            return
        )
    

    func load_image(urlString:String, imageview:UIImageView, index:NSInteger) 

        let url:NSURL = NSURL(string: urlString)!
        let session = NSURLSession.sharedSession()

        let task = session.downloadTaskWithURL(url) 
            (
            let location, let response, let error) in

            guard let _:NSURL = location, let _:NSURLResponse = response  where error == nil else 
                print("error")
                return
            

            let imageData = NSData(contentsOfURL: location!)

            dispatch_async(dispatch_get_main_queue(), 


                self.TableData[index].image = UIImage(data: imageData!)
                self.save(index,image: self.TableData[index].image!)

                imageview.image = self.TableData[index].image
                return
            )


        

        task.resume()
    

    func read() throws 
        do 
            let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
            let managedContext = appDelegate.managedObjectContext
            let fetchRequest = NSFetchRequest(entityName: "Images")

            let fetchedResults = try managedContext!.executeFetchRequest(fetchRequest)

            for (var i=0; i < fetchedResults.count; i++) 
                let single_result = fetchedResults[i]
                let index = single_result.valueForKey("index") as! NSInteger
                let img: NSData? = single_result.valueForKey("image") as? NSData
                TableData[index].image = UIImage(data: img!)
            

         catch 
            print("error")
            throw ErrorHandler.ErrorFetchingResults
        
    

    func save(id:Int,image:UIImage) 
        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        let managedContext = appDelegate.managedObjectContext!

        let entity = NSEntityDescription.entityForName("Images",
            inManagedObjectContext: managedContext)
        let options = NSManagedObject(entity: entity!,
            insertIntoManagedObjectContext:managedContext)

        let newImageData = UIImageJPEGRepresentation(image,1)

        options.setValue(id, forKey: "index")
        options.setValue(newImageData, forKey: "image")

        do 
            try managedContext.save()
         catch 
            print("error")
        
    

在他们的示例中,它运行顺利,但是当我尝试在我的项目中对其进行编码时,出现错误。它说是

EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)

我找不到任何解决方法。

请给我一些提示如何解决这个问题

【问题讨论】:

检查你的核心数据,可能核心数据中的图像名称有错误 @Mr.Bond 我从上面提到的示例中获取代码,并在他们的示例中尝试它的工作没有任何错误,但在我的项目中出现错误,所以我认为没有错误图像名称。如果有错误如何检查呢?抱歉,我是使用 swift 的新手 添加断点并检查您在哪些数据中出错。在您的应用程序中逐一检查数据(tableview 委托方法) 如果在创建managedObjectModel 时出现错误,则应用程序包中没有test.momd 项。 【参考方案1】:

谢谢大家的帮助

我找到了自己的解决方案来解决我的问题 解决方案是我创建的 CoreData 是 xcdatamodel 而不是 xcdatamodeld 并且在我的 AppDelegate 中我使用 momd 所以我只是创建一个带有 xcdatamodeld 扩展名的数据模型

【讨论】:

以上是关于在 tableview 中显示图像时 managedObjectModel 错误指令的主要内容,如果未能解决你的问题,请参考以下文章

我应该调整图像大小以便在UITableView中显示吗?

如何通过在iOS中进行JSON Pasing一次在tableview上显示不同的图像?

Swift 4 TableView Cell 不显示正确的图像

尝试从 tableView 加载图像时,Swift View Controller 空白

swift - 快速滚动时如何阻止tableview单元格出现故障和闪烁的图像?

在tableview中加载异步图像,它们在每次滚动时消失