LoginSignup
15
15

More than 5 years have passed since last update.

SwiftでCoreDataのNSManagedObjectサブクラスを作る

Last updated at Posted at 2014-07-03

Xcode6-β2でCoreDataのエンティティクラスを作ってみると
なぜかObjective-Cのクラス定義が作られてしまいます。
(Swiftが選べません。)

そのまま使ってしまえばいいんですが、なんとなく気になったので
これをSwiftのクラス定義に置き換える方法を調べてみました。

事前準備

  1. プロジェクト作成時に"Use Core Data"にチェック
  2. Entityを作る

今回は例として、idとnameを持つHogeEntityというエンティティを作ってみました。

Objective-Cの場合

Xcodeで何も考えないで作るとObjective-Cのクラス定義が自動生成されます。
Xcode > New File... > iOS/OSX - Core Data > NSManagedObject subclass > エンティティを選択

HogeEntity.h
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>


@interface HogeEntity : NSManagedObject

@property (nonatomic, retain) NSNumber * id;
@property (nonatomic, retain) NSString * name;

@end
HogeEntity.m
@implementation HogeEntity

@dynamic id;
@dynamic name;

@end

Swiftの場合

普通にSwiftファイルを作ります。
Xcode > New File... > iOS/OSX - Source > Cocoa Class > subclass of: NSManagedObject > 略

HogeEntity.swift
import Cocoa

@objc(HogeEntity)
class HogeEntity: NSManagedObject {
    @NSManaged var id:   NSNumber
    @NSManaged var name: String
}

どうやら @NSManaged@dynamic の代わりみたいです。

次に、エンティティとクラス名を関連づけます。
Objective-Cの場合(Xcodeで自動生成した場合)は不要です。

  1. projectname.xcdatamodeldを選択
  2. CONFIGURATIONSでEntityを選ぶ。(今回はHogeEntity)
  3. Classにクラス名を入力。(今回はHogeEntity)

まとめ

いろいろ手作業になってしまうので、割り切ってしまうのがいいと思います。
製品版Xcode6ではSwiftのクラス定義を自動で生成できるようになることを信じて。

参考

Generating Swift models from Core Data entities - stackoverflow

15
15
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
15
15