2016-07-18 9 views
2

forEntityName: "Game"、 "MyApp.Game"を試しました。私dataManagerFileでiOS 10. CoreDataは新しいオブジェクトを挿入します。SIG ABRT

:オブジェクトインスペクタで:+ coreDataPropertiesは.xcdatamodeld使用して、私はCoreData用のファイルを生成し

class Game: NSManagedObject { 

} 

ゲーム+ coreDataClassに

extension Game { 

    @nonobjc class func fetchRequest() -> NSFetchRequest<Game> { 
     return NSFetchRequest<Game>(entityName: "Game"); 
    } 

ファイルゲームに

let appDelegate = UIApplication.shared().delegate as! AppDelegate 
         let container = appDelegate.persistentContainer 

         let managedObjectContext = container.viewContext 
         for item in items { 
          let word = NSEntityDescription.insertNewObject(forEntityName: "MyApp.Game", into: managedObjectContext) as! Game 

私は名前を指定しました: "ゲーム"、クラス "ゲーム"、モジュール "現在の製品モジュール"、コードジェン "c私は3つのファイルを取得した後、私は "マニュアル/なし"にcodegenプロパティを設定しました

私はランタイムエラーが発生しました:ゲームにキャストしようとしているときに "信号SIGABRT":

NSEntityDescription.insertNewObject(forEntityName: "MyApp.Game", into: managedObjectContext) as! Game 

私は間違っていますか? また、最新の変更を適用して、CoreDataの良いマニュアルを教えていただけますか?

答えて

1

最後に、私はそれを動作させました。
これは、xCode BetaのiOS 10でCoreDataを扱う際に直面した最初の問題ではありません。だからここ
はXcodeの8にあなたのエンティティを追加するための一連の手順です:
1.WhenあなたのアプリがCoreDataオプションを選んで作成し、これはyouAppName.xcdatamodeldを作成
2.選択youAppName.xcdatamodeldファイル、エンティティボタン
3が追加されます。CMD + S
5.コード生成「クラス定義」、
エンティティ名「ゲーム」、クラス名「GameEntity」、モジュール「現在の製品モジュール」:必要を追加すると、セットアップコード生成に
4.使用データモデルインスペクタ属性
6. NSManagedObjectSubclassの編集/作成
7 。
GameEntity + CoreDataClass
GameEntity + CoreProperties
COREDATA
8.ファイルのコメントアウト内容 "COREDATA ..."
9. youAppName:あなたは3つの新しいファイルを取得します。xcdatamodeld、データモデルインスペクタ、ファイルを生成した時に、今、ここで「手動/なし」に

「クラス定義」からコデインのプロパティを変更するには、新しいオブジェクトを追加する方法のコードサンプルです:

let appDelegate = UIApplication.shared().delegate as! AppDelegate 
         let container = appDelegate.persistentContainer 

         let managedObjectContext = container.viewContext 
         for item in items { 
          let game = NSEntityDescription.insertNewObject(forEntityName: "Game", into: managedObjectContext) as! GameEntity 
          game.status = item.status 
          game.rs = item.rs 
          game.score = item.score 


          do { 
           try managedObjectContext.save() 

ここでは、データを削除する方法のコードサンプルは次のとおりです。すべての

let appDelegate = UIApplication.shared().delegate as! AppDelegate 
     let container = appDelegate.persistentContainer 
     let managedObjectContext = container.viewContext 
     let fetchRequest: NSFetchRequest<GameEntity> = GameEntity.fetchRequest() 
     do { 
      let games = try managedObjectContext.fetch(fetchRequest) 
      for game in games { 
       managedObjectContext.delete(game) 
      } 
+0

クラスの生成を変更しないでください。それは放置されることを意図しており、Xcodeはクラスファイルを最新の状態に保ちます。コード生成をオフにしてモデルファイルを変更すると、それらは同期しなくなります。ところで、エンティティの作成にあなたの力キャストは何かが間違っていることを示すものです。あなたのコードが正しく設定されていれば、私の答えで述べたように 'Game'エンティティを作成することができます。 –

3

最初に、誰もiOS 10のコアデータの変更に関する文書をまだ更新していません。今後数ヶ月以内にアップルが登場することを期待してください(Appleが含まれています)。

第2に、コアデータの新しい変更で、作成時にキャストする必要がなくなりました。理想的には次のようにすることができます。

let word = Game(context: managedObjectContext) 

正しいことを行います。

ところで、エンティティ "MyApp.Game"を呼び出す必要はありません。それはちょうど "ゲーム"でなければならず、おそらくあなたのエラーの中核です。

+0

おかげで、適切な名前を付けてください。コアデータの更新がありますが、少し省略します))https://developer.apple.com/library/prerelease/content/releasenotes/General/WhatNewCoreData2016/ReleaseNotes.html 私はちょうどlet word = ...、コンパイラエラーが発生しています はい、私は単に "ゲーム"を使用しました –

+0

アップルとそのドキュメントからの更なるアップデートがあります。あなたがコンパイルエラーを取得している場合、どのコンパイルエラーが表示されますか?これはあなたの設定/モデル/コードにどこかに間違っていることを示しています。 –

-1

まず、Xcodeの8は自動的にエンティティを表すのに必要なクラスを生成するので、それらを手動で作成する必要はありません。 の代わりに:

let appDelegate = UIApplication.shared().delegate as! AppDelegate 
    let container = appDelegate.persistentContainer 
    let managedObjectContext = container.viewContext 
    for item in items { 
     let word = NSEntityDescription.insertNewObject(forEntityName: "MyApp.Game", into: managedObjectContext) as! Game 

あなたはこの試みることができる:

let appDelegate = UIApplication.shared().delegate as! AppDelegate 
    let container = appDelegate.persistentContainer 
    let managedObjectContext = container.viewContext 
    for item in items { 
     let word = NSEntityDescription.insertNewObject(forEntityName: "Game", into: managedObjectContext) as! Game 

をしかし、データモデルインスペクタでクラスに返信用 Setting class name in Data Model Inspector

関連する問題