2016-04-21 62 views
0

我正在使用NSFetchedResultsController從CoreData獲取數據並加載包含四個部分的表視圖。當應用程序第一次運行時,它可以很好地工作,將一個plist加載到CoreData中,然後獲取記錄以配置表格的4個部分中的單元格。FetchedResultsController值不會覆蓋自定義的NSManagedObject初始值

當我重新啓動應用程序時,該類的初始值似乎覆蓋了我認爲/認爲存儲在覈心數據中的值。未由該類初始化的值由NSFetchedResultsController成功加載。

例如,有一個值tableSection來定義表格部分。當在第一次表負載,它具有四個部分:

enter image description here

,但如果我再次運行應用程序,只有1 tableSection價值,「我的記錄」(默認值預期爲當用戶首先創建一個記錄):

enter image description here

我不知道,但我想這種情況發生時,我將單元配置...

func configureCell(cell: UITableViewCell, indexPath: NSIndexPath) 
{ 
    let record = fetchedResultsController.objectAtIndexPath(indexPath) as! Record ...} 

它看起來像自定義類啓動時,初始值被賦值,並且永遠不會被我認爲會在fetchedResultsContainer中的值覆蓋。凡是不給自定義類初始化的值,如文本和圖像,從fetchedResultsController賦值:

class Record: NSManagedObject 
{ 
    override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) 
    { 
     super.init(entity: entity, insertIntoManagedObjectContext: context) 
     let randomBit = String(arc4random_uniform(100)) 
     iD = NSDate().toIDTimeDateString() + "-" + randomBit + "OtR" 

     believers = 0 
     deviceTime = NSDate() 
     doubters = 0 
     eventTimeStarted = NSDate() 
     eventTimeEnded = NSDate() 
     featureImageIndex = 0 
     coreLocationUsed = 0 
     photoTaken = 0 
     tableSection = "My Records" 
     timeRecorded = deviceTime 
     validationScore = 0 
    } 
} 

如何實例化的方式「記錄」將與覆蓋初始化值來自fetchedResultsController的數據? (如果這是我的問題)

回答

1

不要在init方法中設置NSManagedObject的值。在init被調用後,NSManagedObject被填充。如果您需要覆蓋值,請在awakeFromFetchawakeFromInsert方法中執行。

我強烈建議查看要重寫的內容Core Data Programming Guide

+0

哦是的 - 你不鼓勵重寫initWithEntity:insertIntoManagedObjectContext:和描述。如果描述在調試操作期間觸發故障,則結果可能不可預知。您通常不應覆蓋鍵值編碼方法,如valueForKey:和setValue:forKeyPath :.知道了謝謝。 – DrWhat