【问题标题】:Fatal error: unexpectedly found nil while unwrapping an Optional value inside an entity致命错误:在实体内展开可选值时意外发现 nil
【发布时间】:2023-03-11 16:56:02
【问题描述】:

我希望在点击删除按钮时删除 UICollectionViewCell:

@IBAction func deleteButtonClicked() {

    error here:    delegate?.deleteTrigger(clothes!)

}

衣服:

var clothes: Clothes? {
        didSet {

            updateUI()
        }
    }

func deleteTrigger:

 func deleteTrigger(clothes: Clothes){

        let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

        let context: NSManagedObjectContext = appDel.managedObjectContext!
        let en = NSEntityDescription.entityForName("Category", inManagedObjectContext: context)


        if let entity = NSEntityDescription.entityForName("Category", inManagedObjectContext: context) {



        let indexPath = NSIndexPath()

        //var cat : Category = clothing as! Category
        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        let managedContext: NSManagedObjectContext = appDelegate.managedObjectContext!
        let fetchRequest = NSFetchRequest(entityName: "Clothes")

        let predicate = NSPredicate(format: "category == %@", self.selectedCategory!)
        fetchRequest.predicate = predicate

        var error: NSError? = nil
        var clothesArray = managedContext.executeFetchRequest(fetchRequest, error: &error)!
        managedContext.deleteObject(clothesArray[indexPath.row] as! NSManagedObject)
        clothesArray.removeAtIndex(indexPath.row)
        self.collectionView?.deleteItemsAtIndexPaths([indexPath])

        if (!managedContext.save(&error)) {
            abort()


        }

        }

衣服是 Core Data 中的一个实体。有谁知道我为什么会收到这个错误?我正在尝试以一对多的关系从核心数据中删除一个 collectionViewCell。 Category 是父实体, Clothes 是 Category 中的实体。

【问题讨论】:

  • 你说的是delegate?.deleteTrigger(clothes!) - 任何时候你使用感叹号,你都在乞求崩溃。这就是 Swift 中感叹号 的意思。你确实崩溃了。没什么大惊喜。如果您不想这样做,请不要这样做。

标签: ios swift core-data uicollectionview


【解决方案1】:

你已经声明了一个属性clothes:

var clothes: Clothes?

你从来没有给它任何,所以它是nil。因此,当您通过说clothes! 强制打开它时,您会崩溃。

【讨论】:

  • 我在更换 var 衣服时仍然遇到同样的错误:衣服? to var 衣服:衣服!当我将 delegate?.deleteTrigger(clothes!) 更改为 delegate?.deleteTrigger(clothes) @matt
  • 这并不让我感到惊讶。你仍然没有给这个变量任何值。你所做的只是移动感叹号。
【解决方案2】:

正如其他人所说,您的价值为零。您需要先解包变量,然后才能对其进行任何操作。试试这个:

@IBAction func deleteButtonClicked() 
{
  if var clothes = clothes
  {
    delegate?.deleteTrigger(clothes)
  }
}

【讨论】:

    猜你喜欢
    • 2016-01-26
    • 2016-02-29
    • 2020-09-19
    • 2016-01-08
    相关资源
    最近更新 更多