2016-09-30 75 views
0

我從核心數據獲取NSManagedObjects並嘗試填充tableview。當我得到的對象數組我能夠訪問和打印屬性。但是當我嘗試訪問相同的tableView cellForRowAtIndexpath我得到零值。這是爲什麼發生?在Swift中訪問NSManagedObject屬性

enter image description here

{ 


import UIKit 

類爲NotesView:UIViewController中,的UITableViewDelegate,UITableViewDataSource {

//MARK:- IBOutlets 
@IBOutlet weak var NotesTable: UITableView! 
var notesArray = [Notes]() 

//MARK:- ViewController Delegates 
override func viewDidLoad() { 
    super.viewDidLoad() 

    notesArray = Notes.getNotes() 
    for value in notesArray{ 
     print(value.body!) 
    } 
    print(notesArray[0].body) 
    NotesTable.delegate = self 
    NotesTable.dataSource = self 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 

} 
//MARK:- TabelView Delegate Methods 
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return notesArray.count 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("NotesTableCell") 
    for value in notesArray{ 
     print("Value = \(value.body)") 
    } 
    cell?.textLabel?.text = (notesArray[indexPath.row]).body! 

    return cell! 
} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let vc = UIStoryboard(name: "Main",bundle: nil).instantiateViewControllerWithIdentifier("NewNoteVC") as! NewNoteView 
    vc.display = true 
    vc.text = notesArray[indexPath.row].body! 
    self.presentViewController(vc, animated: false, completion: nil) 
} 

}

+0

你確定所有'Notes'實例都有'body'值嗎?如果您強制將零值設爲非零,那麼會顯示這些錯誤 –

+0

是的,有2個值並且正確打印。如果沒有主體值,則錯誤應該在viewdidload本身中。 – Hemanth

+0

爲了幫助其他人回答並提供幫助,最好是將代碼發佈到此處而不是鏈接圖像。 –

回答

0

您應首先確認在位置[index.row]該對象不是nil

+0

yes在tableview方法中,Notes對象具有所有nil值,直到viewDidAppear的值不爲零且正確打印。 – Hemanth

0

我發現NSMana gedObjects的生存期較短,即我們不能將它們存儲在數組或其他東西中,並在以後使用它。所以我開始使用NSManagedSubClasses並使用它們。