0

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
4

1 回答 1

0

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

最好定义一个任何视图控制器都可以访问的数据模型,但不属于任何视图控制器。然后,该数据模型可以发送通知,如果视图控制器感兴趣,它可以监听并做出相应的响应。

举个简单的例子,想想 Parse 是如何实现当前用户的。您只需[PFUser currentUser]从代码的任何部分引用。你可以做一些类似的事情[MyAppData currentWidget],或者显然任何需要访问的数据。

为了进一步举例,setter forcurrentWidget可以发布NSNotification诸如WidgetHasChangedNotification. 然后,视图控制器可以将自己作为观察者添加到该通知中。

于 2015-05-18T18:42:24.033 回答