2017-06-16 98 views
0

我想將對象數組保存到coreData中,但是當我使用storeWord()方法時,它總是隻存放在最後一個對象的數組中,而我想把對象數組存儲在,但我不知道是什麼問題,有人可以幫我嗎?謝謝總是保存最後一個對象

這裏是我的objectArray:

var wordArray:[Word] = [ 
    Word(word: "abacus", pronounce: "ˋæbəkəs", translate: "算盤", image: "abacus.jpg", visited: false), 
    Word(word: "abbey", pronounce: "ˋæbɪ", translate: "修道院", image: "abbey.jpg", visited: false), 
    Word(word: "ache", pronounce: "ek", translate: "痛", image: "ache.jpg", visited: false) 
] 

空CoreData陣列:

var words:[WordMO] = [] 

選擇和存儲功用:

override func viewDidLoad() { 
    super.viewDidLoad() 
    storeWord(wordArray: wordArray) 
    getWord() 
} 

func getContext() -> NSManagedObjectContext { 
    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    return appDelegate.persistentContainer.viewContext 
} 


func storeWord(wordArray:[Word]) { 
    let context = getContext() 
    var word:WordMO! 
    word = WordMO(context: getContext()) 

    for item in wordArray { 
     word.word = item.word 
     word.pronounce = item.pronounce 
     word.translate = item.translate 
     word.visited = item.visited 
     if let wordImage = UIImage(named: item.image!) { 
      if let imageData = UIImageJPEGRepresentation(wordImage,1.0) { 
       word.image = NSData(data: imageData) 
      } 
     } 
     words.append(word) 

    } 
    do { 
     try context.save() 
     print("success") 
    } catch { 
     print(error) 
    } 
} 
+0

您需要分配'WordMO' * *裏面for循環 – Paulw11

+0

@ Paulw11I已經更新了我的代碼,但還是沒有解決問題,能不能幫我看看,如果我改變了對不對? –

+0

你需要同時在alloc循環內和alloc。像「let word = WordMO(context:context)」 –

回答

1

移動

var word:WordMO! 
word = WordMO(context: getContext()) 

到您的for循環

+0

這個答案可能是正確的,但它不能解釋原因。 請寫說明 –

+0

入金成功!謝謝你的幫助,但是正如樓上所說,我不知道爲什麼要移動到for循環 –

+1

@廖豪豪在你的版本中,你的word對象被分配並初始化在for循環的範圍之外。在for循環中追加(單詞)時,添加到列表中的對象引用同一對象地址。你只是更新了對象的字段。最後,此對象的字段信息將更新爲最後一個元素的信息。這就是爲什麼你看到列表中的所有單詞都成爲最後一個單詞的信息。像Surya Subethiran說的那樣,你需要在你的循環中同時使用alloc和init,然後你每次都添加一個新的對象。 – Codingpan

相關問題