gpt4 book ai didi

ios - 从核心数据中获取和显示数据

转载 作者:行者123 更新时间:2023-11-29 00:17:37 25 4
gpt4 key购买 nike

目标:

能够在表格 View 的同一行中显示用户选择的日期和选择的时间。时间应该出现在顶部,所选日期应该出现在底部,两者在同一行,就像闹钟一样。

工作:

这是我设置的关系: enter image description here

这就是我如何保存从 UITable 中选择的日期和点击保存按钮时从 UIDatepicker 中保存的时间:

@IBAction func saveButnTapped(_ sender: AnyObject)
{
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext //creates an object of a property in AppDelegate.swift so we can access it

let bob = Bob(context: context)

//save the time from UIDatePicker to core data
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
bob.timeToPing = dateFormatter.string(from: timePicked.date)

// save the days selected to core data
for weekday in filteredWeekdays
{
var day = Days(context: context) //create new Days object
day.daysSelected = weekday as NSObject? //append selected weekday
bob.addToTimeAndDaysLink(day) //for every loop add day object to bob object
}

//Save the data to core data
(UIApplication.shared.delegate as! AppDelegate).saveContext()

//after saving data, show the first view controller
navigationController!.popViewController(animated: true)
}

现在数据已保存,我得到了数据:

func getData()
{
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

do
{
bobs = try context.fetch(Bob.fetchRequest())
}
catch
{
print("Fetching failed")
}

}

尝试选择日期:

我试着关注 this ,下面的评论和以前删除的这个问题的答案来做到这一点:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = UITableViewCell()

let bob = bobs[indexPath.row]
cell.textLabel?.text = bob.timeToPing?.description

// retrieve the days that are selected
var daysArray: [Days] = []
daysArray = bob.timeAndDaysLink?.allObjects as! [Days]

for days in daysArray
{
print (days.daysSelected?.description)
cell.textLabel?.text = days.daysSelected! as! String

}

return cell
}

编辑:print(daysArray) 给出了这个:

[<Days: 0x6080000a5880> (entity: Days; id: 0xd000000000040000 <x-coredata://30B28771-0569-41D3-8BFB-D2E07A261BF4/Days/p1> ; data: <fault>)]

print(daysArray[0]) 给出了这个:

<Days: 0x6080000a5880> (entity: Days; id: 0xd000000000040000 <x-coredata://30B28771-0569-41D3-8BFB-D2E07A261BF4/Days/p1> ; data: <fault>)

如何节省时间

let weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
var filteredWeekdays: [String] = []
@NSManaged public var daysSelectedbyUser: NSSet

然后

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
selectedWeekdays()

}

override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath)
{
selectedWeekdays()
}

func selectedWeekdays()
{
if let selectedRows = tableView.indexPathsForSelectedRows
{
let rows = selectedRows.filter {$0.section == 0}.map{ $0.row}
filteredWeekdays = rows.map{ weekdays[$0] }
print(filteredWeekdays)
}
}

非常感谢!

最佳答案

根据您最新的评论确定崩溃发生在这一行:

cell.textLabel?.text = days.value(forKey: "daySelected") as! String

这显然是您在键名中输入的错误。你有:daySelected并且应该是(基于您的核心数据模型)daysSelected ,但是为您的核心数据实体使用值并强制这样的类型并不是很好的方法。为了让它更好,我建议将这一行替换为:

cell.textLabel?.text = days.daysSelected!

这应该已经是一个 String因为这是 CoreData 中的字符串.如果它是可选的(应该是可选的),你不应该强制它。我会假设只要数据不存在,你就会只显示空单元格,所以更好的是:

cell.textLabel?.text = days.daysSelected ?? ""

每当(由于某种原因)数据不存在时,这将生成空字符串到文本。

编辑

因此,对于您在问题中输入的额外代码:

在您的 CoreData 字段中 daysSelectedString? 的类型, 正确的?然后你分配 timeAndDateLinkNSSet<String> , 正确的?但是这里的期望值应该是NSSet<Days> .

所以让我们稍微编辑一下您的输入代码(我会在每一行上添加注释):

let bob = Bob(context: context) /* create new Bob object */
for weekday in filteredWeekdays {
var day = Days(context: context) /* create new Days object */
day.daysSelected = weekday /* append selected weekday */
bob.addToTimeAndDaysLink(day) /* for every loop add day object to bob object */
}

我希望上面的例子中的一切都很清楚。在这种情况下,您可能会遇到编译器问题,因为如果您选择为实体生成类,您最终会得到两个 func。具有相同的名称但不同的参数(在 Swift 中这应该是两个不同的函数,但 Xcode 有时会指向错误的函数)。如果遇到该问题,请尝试:

let bob = Bob(context: context) /* create new Bob object */
var output: NSMutableSet<Days> = NSMutableSet()
for weekday in filteredWeekdays {
var day = Days(context: context) /* create new Days object */
day.daysSelected = weekday /* append selected weekday */
output.add(day)
}
bob.addToTimeAndDaysLink(output) /* this will assign output set to bob object */

您还应该重命名您的 Days实体到Day为了避免我们现在遇到的 future 困惑,days因为数组只会与其他实体相关,而不是实体本身。

关于ios - 从核心数据中获取和显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44907158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com