我在对 ManagedObjects 进行更改并将这些更改保存到持久存储时遇到问题。
起作用的是删除对象,插入对象。并获取这些对象。如前所述,我无法对获取的托管对象进行更改。
我有两个视图控制器。两者都有公共财产:
@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;
AppDelegate.m 文件为应用程序中的第一个视图控制器设置此属性:didFinishLaunchingWithOptions: 方法如下:
// get reference to view controller //
//..
controller1.managedObjectContext = self.managedObjectContext;
视图控制器 1 在推送到第二个视图控制器时再次传递 managedObjectContext,它在 prepareForSegue: 方法中执行此操作,如下所示:
// Get reference to the detail view //
MySecondViewController *controller2 = segue.destinationViewController;
// Pass the managed object context //
controller2.managedObjectContext = self.managedObjectContext;
在第二个视图控制器中,我从核心数据中获取对象,并将它们存储在视图控制器的属性中,如下所示:
@property (nonatomic, strong) MyKindOfObject *object;
...
self.object = [fetchResults lastObject];
获取对象似乎工作正常,因为我很好地得到了结果..
获取的对象有许多属性,其中一个是 NSString 类型。我在 UITextField 中显示的此属性的值。用户可以在此处更改值,完成后按下按钮。我捕捉到动作并执行以下操作:
self.object.mytext = textField.text;
然后尝试保存到核心数据:
// Save to CoreData //
NSError *error = nil;
if(![self.managedObjectContext save:&error]){
// handle the error //
NSLog(@"is error");
}
else{
NSLog(@"no error");
}
1) 下次用户返回此视图控制器时,将再次获取该对象。但它仍然具有旧值。
2) 我还使用了一个名为 SQLite Manager 的 Firefox 插件来关注相关 sqlite 文件中的数据。单步执行代码时,调用 save 方法后文件中没有任何变化。
3) 同样在 Xcode 中,我使用变量视图来关注 self.managedObjectContext 对象。当我将新数据存储到我的对象中时,就在调用 save 之前,self.managedObjectContext 的所有属性都没有改变(如 unprocessedChanges 或 changedObjects)。
4)我还添加了对 managedObjectContext 的 hasChanges 方法的调用,但这返回 NO:
if([self.managedObjectContext hasChanges]){
NSLog(@"changes managed object context!");
}
5)我还添加了对相关 managedObject 的 hasChanges 方法的调用,但这也返回 NO:
if([self.object hasChanges]){
NSLog(@"changes in managed object!");
}
我可能在这里做错了什么,但我不知道它是什么。我真的希望有人可以帮助我吗?提前致谢!