假设我有一个模型Car,它在ViewModel1中实例化,具有以下初始属性:
ViewModel1
let car = Car(make: "McLaren", model: "P1", year: 2015)
Run Code Online (Sandbox Code Playgroud)
然后我需要在下一个视图控制器中完成汽车的其他信息.在跟踪MVVM时,在视图控制器之间传递模型的正确方法是什么?
使用MVC,它很简单,因为视图可以引用模型:
vc2.car = car
Run Code Online (Sandbox Code Playgroud)
下面是对该问题的伪尝试,但是我认为视图模型应该是私有的,并且只能由单个视图控制器访问.因此,以下尝试对我来说似乎不正确.
ViewController1
fileprivate let viewModel = ViewModel1()
func someMethod() -> {
let car = self.viewModel.car
let vc2 = ViewController2()
vc2.viewModel.car = car
present(vc2, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
ViewController2
let viewModel = ViewModel2()
func anotherMethod() {
print(self.viewModel.car.make) //prints "McLaren"
viewModel.manipulateCar() //adds additional information to the car object
print(self.viewModel.car.color) //prints "Black"
//Pass the finished car to the last view controller to …Run Code Online (Sandbox Code Playgroud) 我试图在我的应用程序中使用 ODR,但beginAccessingResources从未完成。下面是我的代码的简化版本:
let bundleResourceRequest = NSBundleResourceRequest(tags: tags)
bundleResourceRequest.beginAccessingResources { error in
DispatchQueue.main.async {
if let error = error {
bundleResourceRequest.endAccessingResources()
// Handle error
} else {
// Successful
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经开始简单地用.skstag标记一个文件,Level1另一个.sks用 tag 标记Home。当我开始访问 tag 的资源时Home,我可以毫无问题地成功完成。但是,当我尝试使用Level1标记时,完成块永远不会触发。我没有收到错误或成功。当我查看磁盘报告时,它显示的Home是In Use和Level1是Downloading,并且带有一个永不移动的进度条。Level1总共 16 KB 所以它不是太大,我让它静置了大约 10 分钟但没有成功。
什么可能导致此功能永远无法完成?