2016-12-16 18 views
0

私は、エンティティ「ニュース」とCoreDataのモデルを作成しました:スイフト3 | CoreData |カスタムエンティティ

enter image description here

私は「マヌエル/なし」に設定し、NSManagedObjectを作成しました:

public class News: NSManagedObject { 

    @NSManaged var id: String 
    @NSManaged var newsType: Int16 
    @NSManaged var newsImageUrl: String 
    @NSManaged var newsVideoUrl: String 
    @NSManaged var newsTitle: String 
    @NSManaged var newsDesc: String 

} 

私がオーバーライドしたいです私のエンティティのプロパティは、CoreDataモデルに触れることなく、次のようにするだけです。

extension News { 
    @NSManaged var newsUrl: String 
} 

もちろん、私が操作を行います。

news.newsUrl = "" 

が、私は素敵な

理由を得る:「 - [NSManagedObject setNewsUrl:]:認識されていないセレクタ

がどのように変更することなく、(私のエンティティで適切に新しいプロパティを追加することができますCoreData Model)、もちろん、私はこのニュースプロパティをCoreDataに保存しますか?それはちょうど新しいプロパティを宣言するのに十分ではありませんので、あなたがしようとしたアプローチが動作しません

+0

モデルのエンティティにプロパティを追加する必要があります。 – shallowThought

+0

CoreDataモデルを変更せずにNSManagedObjectにプロパティを追加する方法がありますか?拡張機能があっても?それは奇妙に見える! – Aximem

+0

モデルに定義されていないカラムは、dbに存在することはできません。 – shallowThought

答えて

1

、あなたがそのプロパティを確認する必要があり

TYは、データモデルに存在します。モデルを編集しない場合は、コード内で作業する必要があります。

コードでモデル全体を変更するには、を使用する必要があります。永続ストアファイルをロードしたら、オブジェクトモデルを読み取り専用として扱う必要があります。基本的な手順は

  1. そのentitiesまたはentitiesByNameためNSManagedObjectModelを依頼だろう。
  2. 該当するNSEntityDescriptionをそのリストから探します。
  3. 新しいプロパティに新しいNSAttributeDescriptionを作成します。
  4. エンティティのpropertiesアレイに新しい属性を追加します。

これはお勧めできません。私はそれをしないことを強くお勧めしますが、不可能ではありません。何年ものCore Dataコーディングでは、モデルコンパイラの(固定されている)バグを回避するために、モデルをコードで一度だけ修正しました。

モデルの移行を避けることはできません。永続ストアファイルは、使用するデータモデルと一致する必要があります。コード内でモデルを変更すると、モデルのバージョン管理が難しくなり、モデルが一致しないためにアプリケーションがクラッシュする確率が高くなります。

+0

あなたの答えはありがとうTom、これは非常に明確です – Aximem