2016-04-26 74 views
0

我是使用swift的新手,並且在自定義tableview中顯示圖像時遇到問題。我拿一個代碼heremanagedObjectModel當在tableview中顯示圖像時出現錯誤的指令

這是我coredata

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)

,我無法找到任何辦法解決它。

請給我一些提示如何解決這個問題

+0

檢查coredata,可能有一些在圖像名稱錯誤在coredata –

+0

@ Mr.Bond我從例子中,我提到上面的代碼,我嘗試在他們的例子中,其工作沒有任何錯誤,但在我的項目中有一個錯誤,所以我認爲在圖像名稱中沒有錯誤。如果有一個錯誤如何檢查它?對不起,我新使用swift – Dirus

+0

添加斷點並檢查哪些數據會出錯。在你的應用程序中逐個數據檢查(tableview委託方法) –

回答

0

謝謝所有幫助

我發現我自己的解決方案,我的問題 的解決方案是,CoreData創建是xcdatamodelxcdatamodeld和在我的AppDelegate我用momd,所以我只需要創建一個數據模型與xcdatamodeld擴展

相關問題