在ViewControllers之间传递NSManagedObjects - 随机错误访问错误

Sle*_*lee 3 iphone objective-c ipad

在ViewControllers之间传递NSManagedObjects是个坏主意吗?我有一个iPad应用程序,我似乎遇到随机坏访问崩溃和sigbart错误.

这些NSManageObjects来自CoreData,我想知道它们是否有时会丢失内存而导致这种情况.我希望只是将它们从控制器传递给控制器​​,以避免在每个viewcontroller上进行获取.

Ash*_*row 6

听起来这是一个糟糕的对象内存分配实践.只要您没有多线程化您的应用程序并且只有一个managedObjectContext(典型),您可以在VeiwControllers之间传递这些NSManagedObjects没问题.

可能发生的是你将引用从一个ViewController传递给另一个ViewController而不用使用retain消息增加它的引用计数.这可能会有点冒险.

我建议你在ViewControllers上有一个retain属性,比如

@property (nonatomic, retain) NSManagedObject *yourObject;
Run Code Online (Sandbox Code Playgroud)

然后,当您获得托管对象时,请保持这样:

self.yourObject = ...;
Run Code Online (Sandbox Code Playgroud)

...当你想将它传递给另一个视图控制器时:

otherViewController.yourObject = ...;
Run Code Online (Sandbox Code Playgroud)

它将负责为您设置保留/释放.