当您有一个多平台项目时,您如何测试代码的共享部分?我看到了针对 iOS 的测试和针对 macOS 的测试,但没有针对共享部分的测试。我想为我的应用程序的平台独立部分添加单元测试。
我用来CloudKit存储公开可用的数据,并将新数据NSPersistentCloudKitContainer作为我的核心数据堆栈的一部分来存储/同步私有数据。
当用户打开我的应用程序时,他们处于以下 4 种状态之一:
状态 1 和状态 2 代表我的快乐路径。如果他们是新用户,我想在显示初始视图之前向用户的私人存储添加一些数据。如果他们是回头客,我想从核心数据中获取数据以传递到初始视图。
确定新/老用户:
我的计划是使用NSUbiquitousKeyValueStore. 我对此的担忧是处理以下情况:
下载应用程序 -> 被记录为之前启动过该应用程序 -> 删除并在新设备上重新安装/安装该应用程序
我认为NSUbiquitousKeyValueStore需要一些时间才能接收更新,因此我需要等待其完成同步,然后再进入初始视图。那么问题来了,如果他们无法访问 iCloud 会发生什么?NSUbiquitousKeyValueStore如果无法收到更新,如何告诉我他们是否是回访用户?
确定 iCloud 访问:
根据我所做的研究,我可以检查iCloudFileManager.default.ubiquityIdentityToken是否nil可用,但这不会告诉我原因。我必须用它CKContainer.default().accountStatus来了解为什么 iCloud 不可用。问题是这是一个异步调用,我的应用程序在了解他们的帐户状态是什么之前就会继续前进。
我对这个实在是摸不着头脑。优雅地确保所有这些状态都得到处理的最佳方法是什么?
core-data ios nsubiquitouskeyvaluestore cloudkit nspersistentcloudkitcontainer
当堆栈中有操作时,为什么不@Environment UndoManager更新其属性?canUndo我有一个视图,它的子视图可以利用取消/重做功能,但由于某种原因,我无法根据管理器禁用撤消按钮。
struct MyView: View {
@Environment(\.undoManager) var undoManager: UndoManager?
var body: some View {
Button("Undo") { ... }
.disabled(!self.undoManager!.canUndo)
}
}
Run Code Online (Sandbox Code Playgroud) 编辑:感谢一些反馈,我已经能够部分工作(更新代码以反映当前更改)。
即使该应用程序似乎按预期工作,我仍然收到“正在修改状态...”警告。如何updateUIView在canvasViewDrawingDidChange不导致此问题的情况下更新视图的绘图并将新绘图推入堆栈?我尝试将它包装在调度调用中,但这只会创建一个无限循环。
我正在尝试在UIViewRepresentable( PKCanvasView) 中实现撤消功能。我有一个父 SwiftUI 视图WriterView,其中包含两个按钮和画布。
这是父视图:
struct WriterView: View {
@State var drawings: [PKDrawing] = [PKDrawing()]
var body: some View {
VStack(spacing: 10) {
Button("Clear") {
self.drawings = []
}
Button("Undo") {
if !self.drawings.isEmpty {
self.drawings.removeLast()
}
}
MyCanvas(drawings: $drawings)
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我如何实施我的UIViewRepresentable:
struct MyCanvas: UIViewRepresentable {
@Binding var drawings: [PKDrawing]
func makeUIView(context: Context) -> PKCanvasView {
let canvas = PKCanvasView()
canvas.delegate = context.coordinator
return …Run Code Online (Sandbox Code Playgroud) swiftui ×2
cloudkit ×1
core-data ×1
ios ×1
nspersistentcloudkitcontainer ×1
pencilkit ×1
unit-testing ×1
xcode ×1
xcode12 ×1