1

對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!"); 
} 

我可能在這裏做了一些完全錯誤的事情,但我無法弄清楚它是什麼。 我真的希望有人能幫助我嗎? 在此先感謝!

回答

1

奧克讓我回答我自己的問題:作爲我的新手,我確實做了一件完全錯誤的事情。我以爲自己知道自己比蘋果更好。經驗教訓:我不知道!

在模型中創建實體後,我爲每個實體(或實際上每個實體的NSManagedObject子類)創建了自定義託管對象類。 在生成的實現文件中,所有屬性(屬性)都被實現爲@dynamic。由於缺乏知識,我不瞭解/認識到這一點。因此,我認爲newby認爲:讓我們改變@synthesize。

希望這篇文章可以幫助一些其他newby不犯同樣的錯誤。

+2

我犯了這個錯誤。現在經過大約4小時未經過濾的憤怒,現在糾正了它,一切都恢復正常。 Brabbeldas我愛你。 –