iOS控制器数据共享与Android活动数据共享

时间:2016-05-19 07:12:33

标签: android ios android-intent uistoryboardsegue

我正在开发适用于iOS和Android的原生应用,我注意到一些不同的东西引起了我的兴趣。这不是问题或错误,也许只是在不同平台上的不同行为,但我想了解为什么以及我是否遗漏了某些内容。

假设有2项Android活动:

Activity1 starts Activity2 and using intents bundle assign its model to Activity2 model

iOS控制器也一样:

Controller1 starts Controller2 and using segues assign its model to Controller2 model

当我在Activity2中修改模型并返回到activity1时,模型不会更新,因此我必须通知此更改(使用广播,代理或其他..)。同样不适用于iOS,因为当我返回到Controller1时,模型已经更新。

为什么会这样? iOS控制器是否在同一个模型实例上运行,而Android活动是克隆?

3 个答案:

答案 0 :(得分:0)

检查您的IOS代码,您将找到一个名称为" viewWillAppear"在第一个控制器上,所以此方法将更新您在上一个屏幕上所做的更改。

您可以使用方法" onResume()"在Android中应用相同的内容,因此请实施此方法并从" onCreate()"编写更新任务。方法到" onResume()"方法

在IOS和Android中,主要方法是" ViewDidLoad()"和" onCreate()"当活动或控制器启动时只调用一次,然后他们将通过" viewWillAppear"和" onResume"方法

检查这会对您有所帮助。

答案 1 :(得分:0)

您注意到的差异是由于使用了两种不同的编程语言。

在Android中,您使用的是Java,在 Java中没有任何内容通过引用传递,所有内容都按值传递。对象引用按值传递。

此外字符串在Java中是不可变的,因此如果使用intents包将String传递给Activity2,并在Activity 2中修改它,系统会在不同的内存地址中分配新的String。

请参阅this关于Java参数传递的答案。

希望这有帮助

答案 2 :(得分:0)

在iOS上,您通过引用传递对象到新VC。因此,如果您在第二个VC中更改该对象的属性,则该更改对于第一个VC是可见的,因为它是同一个对象。

在Android上,当您通过Bundle传递对象时,会对其进行序列化和反序列化,可以创建新对象,因此原始Activity中不会显示更改。在片段之间传递Parcelable数据时,可以通过引用传递它们,并且更改在原始Fragment中可见。

修改: 在Java / Android中,对象是按值传递的,而不是通过引用传递的,因此当您将新对象分配给变量时,原始片段中的旧对象不会更改。但是如果你改变它的内部状态(例如属性/字段),那么这将反映在原始片段中。