Vir*_*Max 0 iphone xcode core-data objective-c ios
我在我的应用程序中使用Core Data.
我的问题是Entities(NSManagedObject)持久化状态,无论我是否调用Save NSManagedObjectContext,只有条件是应用程序处于活动状态.当我终止应用程序并再次运行它时,所有实体都会保留最后一个属性或在调用最后一个" Saveon NSManagedObjectContext" 之前所做的更改.
例如.我有OpenViewController和FormOpenViewController.
FormOpenViewController适用于(Form *)entity(NSManagedObject).
OpenViewController从数据库调用FormOpenViewController和获取(Form *)对象并将其传递给FormOpenViewController的(Form *)form对象.
在viewDidLoad的FormOpenViewController我改变一个属性的值" editable"的(Form *)form对象为" YES".
即 FormOpenViewController.m
- (void)viewDidLoad
{
// changed the editable property of form to yes from no
if([formEditData.editable boolValue] == NO)
{
form.editable = [NSNumber numberWithBool:YES];
}
}
-(void)saveData
{
[[shareInstance delegate].managedObjectContext save:nil];
[shareInstance delegate].arrForder = [[ipegsClient shareInstance ] getLoginUser].folders.allObjects;
}
Run Code Online (Sandbox Code Playgroud)
所以现在如果我回去OpenViewController没有调用saveData方法,并再次来FormOpenViewController控制不进入if块,这意味着它的表单对象现在具有"可编辑"属性为" YES"应该是" NO"因为直到我没有" saveData功能".
更新:
我在FormOpenViewController每次调用或呈现它时都会创建新实例.并且(Form *) form在调用之前每次都从数据库中获取新对象FormOpenViewController.
编辑:
在applicationWillTerminate中调用以下函数:
- (void)saveContext
{
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
if (managedObjectContext != nil) {
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
abort();
}
}
}
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会这样?
提前致谢.如果我在某个地方出错了,请纠正我.
这就是核心数据的工作原理.
将托管对象上下文视为内存暂存器,用于您正在进行的任何更改.当您更改对象时,只要您使用该上下文,该更改就是"真实的".
如果保存上下文,那些更改将写入下一级别,即父上下文或磁盘上的持久存储.
如果在不保存的情况下销毁上下文,则会丢失这些更改.
如果要还原或撤消在特定会话期间所做的更改,则最简单的方法是创建子上下文并将其传递给编辑视图控制器.如果您随后"取消"编辑视图控制器,只需销毁子上下文,您的更改将丢失.否则,保存上下文,它们将传递到主上下文.
因此,在不保存上下文的情况下终止应用程序意味着下次启动时,上下文是根据持久性存储中的数据构建的,该数据没有写入更改.
| 归档时间: |
|
| 查看次数: |
733 次 |
| 最近记录: |