小编sma*_*rus的帖子

iOS:如何使用MVVM将模型从视图模型传递到视图模型?

假设我有一个模型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)

mvvm ios swift

5
推荐指数
2
解决办法
6552
查看次数

NSBundleResourceRequest beginAccessingResources 永远不会完成

我试图在我的应用程序中使用 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标记时,完成块永远不会触发。我没有收到错误或成功。当我查看磁盘报告时,它显示的HomeIn UseLevel1Downloading,并且带有一个永不移动的进度条。Level1总共 16 KB 所以它不是太大,我让它静置了大约 10 分钟但没有成功。

什么可能导致此功能永远无法完成?

ios swift on-demand-resources

3
推荐指数
1
解决办法
745
查看次数

标签 统计

ios ×2

swift ×2

mvvm ×1

on-demand-resources ×1