對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我愛你。 –