Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从其他视图控制器更新PFObject_Ios_Properties_Parse Platform_Pfobject - Fatal编程技术网

Ios 从其他视图控制器更新PFObject

Ios 从其他视图控制器更新PFObject,ios,properties,parse-platform,pfobject,Ios,Properties,Parse Platform,Pfobject,在尝试从两个不同的视图控制器中访问和修改同一PFObject时,我看到了一些有趣的行为 我有一个视图控制器,它具有PFObject的强属性。当我呈现第二个视图控制器时,它具有相同类型的弱属性,因此我将该属性设置为第一个控制器的属性。当我在第二个视图控制器中更改PFObject的数据时,它会在第一个视图控制器中更新,因为我认为它本质上是同一个对象。这真的很有效 现在,如果我在第二个控制器中尝试将PFObject设置为nil,当我返回到第一个控制器时,PFObject仍然被定义-它不是nil。为什么

在尝试从两个不同的视图控制器中访问和修改同一PFObject时,我看到了一些有趣的行为

我有一个视图控制器,它具有PFObject的强属性。当我呈现第二个视图控制器时,它具有相同类型的弱属性,因此我将该属性设置为第一个控制器的属性。当我在第二个视图控制器中更改PFObject的数据时,它会在第一个视图控制器中更新,因为我认为它本质上是同一个对象。这真的很有效

现在,如果我在第二个控制器中尝试将PFObject设置为nil,当我返回到第一个控制器时,PFObject仍然被定义-它不是nil。为什么呢?我需要确保第二个视图控制器正在编辑第一个控制器所拥有的完全相同的对象

将属性存储到第二个控制器中的第一个控制器本身,并引用该公共属性,而不是尝试对同一对象使用两个属性,或者在这种情况下建议使用什么

//First controller
@property (nonatomic, strong) PFObject *myObject;

//prepare for segue
//ensure myObject is not nil first, otherwise alloc init, then
secondController.myObject = self.myObject;

//Second controller
@property (nonatomic, weak) PFObject *myObject;

//somewhere in the code
self.myObject[SomeKey] = SomeValue; //works great, updates myObject in both controllers
self.myObject = nil; //doesn't affect the first controller's myObject

在第二个控制器中,将PFObject的引用设置为nil。这不会影响对象本身或第一视图控制器,因为它仍然具有对对象的引用

最好定义一个可由任何视图控制器访问的数据模型,而不是由任何视图控制器独占。然后,该数据模型可以发送通知,如果视图控制器感兴趣,它可以监听并相应地响应

作为一个简单的例子,考虑一下Parse是如何实现当前用户的。您只需从代码的任何部分引用[PFUser currentUser]。您可以使用[MyAppData currentWidget]执行类似的操作,或者显然可以访问任何需要访问的数据

为了进一步说明该示例,currentWidget的setter可以发布NSNotification,例如WidgetHasChangedNotification。然后,视图控制器可以将自己添加为该通知的观察者