9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SwiftでNSManagedObjectのサブクラスを作成してフェッチする方法(Beta5で)

Posted at

モデルでのクラス名の設定

xcdatamodeldでエンティティのクラス名にモジュール名のプレフィックスを付ける必要があります。アプリ名がMyApp、Entity名がPersonだとするとクラス名はMyApp.Personと設定します。

モジュール名を付けないとNSEntityDescription.insertNewObjectForEntityForNameが動作せず、コンテキストでフェッチしてもオブジェクトをサブクラスにキャストできませんでした。プレフィックスを付けるとフェッチしたオブジェクトのクラス名がMyApp.Personとなっていましたが、付けないとNSManagedObject_Person(の様な名前。うろおぼえです。)となっていました。

インスタンスの作成

let person = NSEntityDescription.insertNewObjectForEntityForName("Person", inManagedObjectContext: context) as Person

もしくは

let entity = NSEntityDescription.entityForName("Person", inManagedObjectContext: context)
let person = Person(entity: entity, insertIntoManagedObjectContext: context)

として作成します。

Fetch

フェッチではフェッチした後でキャストします。executeFetchRequestを実行する時にキャストしようとするとエラーになりました。

let request = NSFetchRequest(entityName: "Person")
let array = context.executeFetchRequest(request, error: nil)
let persons = array as? [Person]
9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?