对ManagedObjects进行更改并将这些更改保存到持久存储区时遇到问题。保存对NSManagedObject的更改
工作是删除对象,插入对象。并获取这些对象。如上所述,我无法更改提取的托管对象。
我有两个视图控制器。 两者都有一个公共属性:
@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方法的调用,但是这也退货否:
if([self.object hasChanges]){
NSLog(@"changes in managed object!");
}
我可能在这里做了一些完全错误的事情,但我无法弄清楚它是什么。 我真的希望有人能帮助我吗? 在此先感谢!
我犯了这个错误。现在经过大约4小时未经过滤的愤怒,现在纠正了它,一切都恢复正常。 Brabbeldas我爱你。 –