我试图简单地保存一个核心数据记录。
代码:
@Environment(\.managedObjectContext) var managedObjectContext
@State var title: String = ""
@State var selectedColor: UIColor? = ColorConstants.defaultColor
// more irrelevant code here
Button(action: {
let todoList = TodoList(context: self.managedObjectContext)
todoList.title = self.title
todoList.color = self.selectedColor
do {
try self.managedObjectContext.save()
} catch let error as NSError {
print(error.localizedDescription)
print(error.localizedFailureReason)
print(self.title)
print(self.selectedColor)
}
}, label: {
Text("Save")
})
Run Code Online (Sandbox Code Playgroud)
这是打印:
The operation couldn’t be completed. (Foundation._GenericObjCError error 0.)
nil
Test
Optional(<UIDynamicSystemColor: 0x600001daf300; name = systemRedColor>)
Run Code Online (Sandbox Code Playgroud)
我在 Core Data 中title设置为 a String …
如何使用@FetchRequest传递给 a 的参数struct?
struct TodoItemView: View {
var todoList: TodoList
@FetchRequest(
entity: TodoItem.entity(),
sortDescriptors: [NSSortDescriptor(key: "order", ascending: true)],
predicate: NSPredicate(format: "todoList == %@", todoList)
) var todoItems: FetchedResults<TodoItem>
...
Run Code Online (Sandbox Code Playgroud)
我已经todoList设置为via的One关系。TodoItemTodoList
它给了我错误:
不能在属性初始值设定项中使用实例成员“todoList”;属性初始值设定项在 'self' 可用之前运行
@FetchRequest如果我不能在初始化程序中使用它,我该如何处理这种关系?另外,我应该todoList.objectID在这里使用某个地方吗?
我的子视图导航栏中有一个很大的空间。
我假设通过添加trailing按钮,它将使所有内容都很好地对齐back按钮的右侧。
这是我的主要观点:
现在这是我的子视图:
看一下顶部的巨大缺口。我希望plus按钮位于按钮的右侧back。我是否需要为此创建自定义后退按钮?
这是我的子视图代码:
var body: some View {
NavigationView {
List {
Text("hello world")
Text("hello world")
Text("hello world")
}
.navigationBarTitle(todoList.title!)
.navigationBarItems(trailing:
HStack {
Button(action: {
self.add = true
}, label: {
Image(systemName: "plus")
})
}
)
}
}
Run Code Online (Sandbox Code Playgroud)
我也想从back按钮中删除文本,所以它只是一幅图像。
总结一下:
plus按钮右上方的back按钮back按钮文本,ColorTodo在本示例中为是否有SwiftUI的本机方式,还是需要自定义后退按钮并禁用默认按钮?
我想要一个带有一些预定义颜色的简单颜色选择器。用户应该只能选择其中一种颜色。
It should work like a "radio" input where when one color is selected, the other colors uncheck.
我决定一个不错的方法是使用系统“circle.fill”和“checkmark.circle.fill”作为所选项目的图像。我只是将foregroundColorfor each设置为相应的.color.
不过,我很难弄清楚这个逻辑。我知道我可以为图像本身创建一个简单的视图并将其传递.color给每个图像,但是我将如何确保一次仅“检查”一张图像,并从“已检查”图像中获取值,以便它可以传递给核心数据?
我想我可以使用陈述$var哪个改变,但是在选择一个人时如何取消选择所有其他图像?我应该将图像放入数组或其他东西中吗?我迷路了。