我想知道实现某个功能的最佳方式是什么。我有一个消息编写器视图,用户在其中创建一个NSManagedObject MessageObject
. 我还有一个ObjectHelper
初始化了全局实例的类。
当用户进入撰写视图时,我有一个后台(私人队列)立即NSManagedObjectContext
创建一个。MessageObject
这里要注意的是ObjectHelper
(不是ComposerViewController)是这个新对象的所有者——它有一个具有强引用的属性变量:
ObjectHelper.h:
@property(nonatomic, strong) MessageObject *newObject;
然后,回到我的ComposeViewController
,我设置了一个计时器,每 30 秒将对象保存到磁盘(这会保存草稿,如自动保存,以防用户以某种方式被中断或应用程序崩溃,数据不会被清除) )。
然后,当用户点击保存按钮时,我想确保我在主线程上做的工作尽可能少,以便关闭模式视图动画流畅,并且函数快速返回到主视图控制器。所以我要做的是NSDictionary
用消息对象的所有值创建一个,调用[globalObjectHelperInstance updateNewObjectInstanceWithDictionary:]
这样做是newObject
用字典中的值更新在撰写视图开始时已经创建的实例,并在后台线程中执行此操作。
然后我解雇了模态。
我在这里有几个问题(请尽可能回答):
有没有更好的方法来实现“草稿”保存功能,而不是在 中创建属性实例
ObjectHelper
?(我在外部类中创建属性实例的ComposeController
原因是视图控制器在对象上完成后台工作时关闭,所以如果我将其设为实例变量,我担心它会从内存中消失。)属性引用应该是弱还是强?我知道 an
NSManagedObjectContext
不能保证保留它的对象,除非(我认为)这些对象有待处理的、未保存的更改。由于某种原因,在保存之前调用
[backgroundMOC obtainPermanentIDsForObjects:self.newObject error:&error]
会[globalObjectHelperInstance updateNewObjectInstanceWithDictionary:]
导致 EXC_BAD_ACCESS 崩溃。我猜这与我在我的情况下管理记忆的方式有关。