开发者

How can I suspend the working of an NSFetchedResultsController?

开发者 https://www.devze.com 2023-01-30 07:43 出处:网络
I have a UITableViewController fed by an NSFetchedResultsController.From it, the user can call up a modal ViewController in which he or she can enter new data.As this begins, I create a temporary obje

I have a UITableViewController fed by an NSFetchedResultsController. From it, the user can call up a modal ViewController in which he or she can enter new data. As this begins, I create a temporary object as follows:

newPtr = [[Entry alloc] initWithEntity:[NSEntityDescription
entityForName:@"Entry" inManagedObjectContext:self.nmocontext]
insertIntoManagedObjectContext:self.nmocontext];

As the user makes choices, attributes of this 'provisional' object, newPtr, are set.

The problem is that the base UITableVi开发者_如何转开发ewController remains active while the modal ViewController is visible. It seems to be freaking out (causing crashes) in some cases when it realizes a mandatory attribute of newPtr has not been set yet.

What can I do to stop the NSFetchedResultsController from looking at my managed object context until the modal ViewController is dismissed?


Core Data supports "nested" managed object contexts which allow for a flexible architecture that make it easy to support independent, cancellable, change sets. With a child context, you can allow the user to make a set of changes to managed objects that can then either be committed wholesale to the parent (and ultimately saved to the store) as a single transaction, or discarded. If all parts of the application simply retrieve the same context from, say, an application delegate, it makes this behavior difficult or impossible to support.


I haven't tested this myself but a possible approach would be to implement viewWillAppear and viewWillDisappear, and set the fetchedResultsController delegate to self on will appear and nil on will disappear.

OR

You could create an NSObject that mirrors the attributes of your NSManagedObject in your editing window. Once the user has finished editing the attributes (and you have run the appropriate validation rules) you can pass them back to your NSManagedObject instance and let the fetchedResultsController do its job.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号