如果swift Coredata功能为空,则隐藏按钮

时间:2019-06-01 17:09:03

标签: swift

我对某些代码有疑问。我有一个称为附件的功能。它调用DatabaseManager来调用特定的函数getttachmentdata。这会调用coredata来查看用户是否上传了图像并对其进行调用。如果有,我将在代码的另一部分中用户单击一个按钮,并显示该图像。

问题是,当数据为空白或没有上载内容时,我希望禁用该按钮。这可能是一个简单的修复程序,但实际上我不确定。

    let attachments = DataBaseManager().getAttachmentData()
    if attachments.isEmpty  {
        btnProofOfDelivery.isHidden = true
        btnProofOfDelivery.isEnabled = false
    }

我写了上面的代码,但是,当我尝试运行程序时,它仍然显示我想消失的按钮。在没有if语句的情况下运行会使按钮消失。

获取附件的代码

func getAttachmentData()-> Array<Data>{
    var data1 = [Data]()
    let context = CoreData.sharedCoreData.managedObjectContext
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Attachments")

    do {
        let result = try context.fetch(request)
        print(result)
        for data in result as! [NSManagedObject] {
            print(data.value(forKey: "attachment") as! Data)
            data1.append(data.value(forKey: "attachment") as! Data)
        }
        if data1.count == 0 {
            return [Data()]
        }else{
            return data1
        }
    } catch {
        return [Data()]
    }
}

1 个答案:

答案 0 :(得分:0)

以下是您的错误,如果获取未返回任何内容,则会返回一个新的Data对象

if data1.count == 0 {
   return [Data()]
}

您当然想写

if data1.count == 0 {
   return [Data]()
}

还有一些问题

或者您可以删除所有这些内容,因为data1已正确初始化,因此您可以以任何一种方式返回它,以便可以将for {}循环之后的代码简化为

        return data1
    } catch {
        print(error)
    }
}
相关问题