2016-08-02 41 views
0

我想以編程方式迅速創建一個新的屬性到已經存在的實體
這是我的代碼:斯威夫特崩潰時新CoreData屬性到現有實體

let model = NSManagedObjectModel() 
    var properties = Array<NSAttributeDescription>() 
    let remoteURLAttribute = NSAttributeDescription() 
    remoteURLAttribute.name = "\(foundArray[indexPath.row]) id" 
    remoteURLAttribute.attributeType = .stringAttributeType 
    remoteURLAttribute.isOptional = false 
    remoteURLAttribute.isIndexed = true 
    properties.append(remoteURLAttribute) 
    entity?.properties = properties 
    model.entities = [entity!] 

應用程序總是與此錯誤崩潰:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Can't modify an immutable model.'

我該如何解決這個問題?

回答

1

在使用來讀取或存儲數據之前,您只能更改數據模型。當你第一次加載時它是可變的,但只要你使用它進行模型編輯以外的任何操作,它就會變得不可變。

像這樣改變模型通常是一個壞主意。但如果由於某種原因需要這樣做,則在使用該模型加載或保存任何數據之前,您必須使用

+0

你是對的,但我想添加一個新的屬性到一個已經存在的實體。我怎樣才能做到這一點? –

+0

通常的方法是[創建新版本的模型文件並進行模型遷移](https://developer.apple.com/library/prerelease/content/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/Introduction.html )。可以在代碼中修改模型,但**非常不尋常,因此即使這樣,您仍然需要進行模型遷移。 –

+0

那麼最好的選擇是:創建一個新的模型還是找到另一種方式而不創建新的屬性? –

-1

我還沒有真正嘗試過這一點,但如何將模型從常量改變爲變量(即var而不是let)。

+0

它不起作用 –

1

模型在運行時不可編輯。見documentation,段落Editing Models Programmatically。您只能複製它並進行更改。