尝试从两个不同的视图控制器中访问和修改相同的PFObject
时,我看到了一些有趣的行为。
我有一个视图控制器,它具有PFObject
的强大属性。当我呈现第二个视图控制器时,它具有相同类型的弱属性,因此我将该属性设置为等于第一个控制器的属性。当我在第二个视图控制器中更改PFObject
的数据时,它会在第一个视图控制器中更新,因为我认为它本质上是同一个对象。这非常有效。
现在,如果我尝试在第二个控制器中将PFObject
设置为等于nil
,当我返回第一个控制器时,仍然会定义PFObject
- 它是&#39}不是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
答案 0 :(得分:0)
在第二个控制器中,您将PFObject
的引用设置为nil
。这不会影响对象本身或第一个视图控制器,因为它仍然具有对象的引用。
最好定义一个任何视图控制器都可以访问的数据模型,但不是唯一拥有的数据模型。然后,该数据模型可以发送通知,如果视图控制器感兴趣,它可以听取并做出相应的响应。
作为一个简单的例子,想想Parse如何实现当前用户。您只需从代码的任何部分引用[PFUser currentUser]
即可。您可以使用[MyAppData currentWidget]
执行类似操作,或者显然需要访问任何数据。
为了进一步展示示例,currentWidget
的设置者可以发布NSNotification
,例如WidgetHasChangedNotification
。然后,视图控制器可以将自己添加为该通知的观察者。