Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Realm超入門
2015.2.28 Cocoa勉強会関西 #60
@itok_twit
参加できなかったので
資料だけでも
自己紹介
• いとうけい(itok)
• 公私共にプログラマ iOS / Mac(たまに Android)
• Objective-C歴10年以上、Swift歴1ヶ月ほど
• http://itok.jp/
Realm超入門
Realmとは
• SQLiteやCore Dataの置き換えとして作られたモ
バイルプラットフォーム用のデータベース
• iOS / Mac / Android対応
• Apache Licence 2.0だがDBのコア部分はクロー
ズド(公...
特徴
• 記述が簡単:クラスを定義→データベースの構造
• クエリが速い
• 省メモリ
できること
• 数値、文字列、日付、バイナリなど一通りの型に対応
• NSPredicate を使う
• メモリ上に一時的なDBも作れる
• スレッドセーフ!
• JSONからの直接マッピング
できないこと
• カスケードルールがない
• プロパティを限定してのクエリ発行がない
• ObjectID的なものはない
• KVO(Notificationを使ってね、とのこと)
• 今後に期待
導入方法
• CocoaPodsに対応
• Carthageにも対応
• frameworkとしても配布中
DEMO
サンプル
今村 はじめ,imamura_hajime@example.com,男,44,神奈川県,14
藤島 恵美,fujishima_megumi@example.com,女,27, 城県,08
海野 淳子,umino_atsuko@exam...
Core Dataの場合
lazy var managedObjectModel: NSManagedObjectModel = {
let modelURL = NSBundle.mainBundle().URLForResource("Re...
Realmの場合
class RLPerson: RLMObject {
dynamic var name = ""
dynamic var email = ""
dynamic var sex = ""
dynamic var age = 0...
まとめ
• Realmいいよ
• 小規模なデータベースならどんどん使っていこう!
• 公式日本語ドキュメントあります→ http://
realm.io/jp/docs/cocoa/0.90.5/
• 先日Realm Tech Talkが開催さ...
Upcoming SlideShare
Loading in …5
×

20150228 Realm超入門

2,144 views

Published on

20150228 Cocoa勉強会関西#60 に参加できなかったけれど、資料だけは作っていたので。

Published in: Software
  • Be the first to comment

20150228 Realm超入門

  1. 1. Realm超入門 2015.2.28 Cocoa勉強会関西 #60 @itok_twit 参加できなかったので 資料だけでも
  2. 2. 自己紹介 • いとうけい(itok) • 公私共にプログラマ iOS / Mac(たまに Android) • Objective-C歴10年以上、Swift歴1ヶ月ほど • http://itok.jp/
  3. 3. Realm超入門
  4. 4. Realmとは • SQLiteやCore Dataの置き換えとして作られたモ バイルプラットフォーム用のデータベース • iOS / Mac / Android対応 • Apache Licence 2.0だがDBのコア部分はクロー ズド(公開を検討中) • 詳しくは→ http://realm.io/
  5. 5. 特徴 • 記述が簡単:クラスを定義→データベースの構造 • クエリが速い • 省メモリ
  6. 6. できること • 数値、文字列、日付、バイナリなど一通りの型に対応 • NSPredicate を使う • メモリ上に一時的なDBも作れる • スレッドセーフ! • JSONからの直接マッピング
  7. 7. できないこと • カスケードルールがない • プロパティを限定してのクエリ発行がない • ObjectID的なものはない • KVO(Notificationを使ってね、とのこと) • 今後に期待
  8. 8. 導入方法 • CocoaPodsに対応 • Carthageにも対応 • frameworkとしても配布中
  9. 9. DEMO
  10. 10. サンプル 今村 はじめ,imamura_hajime@example.com,男,44,神奈川県,14 藤島 恵美,fujishima_megumi@example.com,女,27, 城県,08 海野 淳子,umino_atsuko@example.com,女,32,熊本県,43 榎本 彩華,enomoto_ayaka@example.com,女,27,滋賀県,25 ・・・
  11. 11. Core Dataの場合 lazy var managedObjectModel: NSManagedObjectModel = { let modelURL = NSBundle.mainBundle().URLForResource("RealmTest", withExtension: "momd")! return NSManagedObjectModel(contentsOfURL: modelURL)! }() lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator? = { var coordinator: NSPersistentStoreCoordinator? = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel) let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("RealmTest.sqlite") var error: NSError? = nil var failureReason = "There was an error creating or loading the application's saved data." if coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil, error: &error) == nil { coordinator = nil // Report any error we got. let dict = NSMutableDictionary() dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data" dict[NSLocalizedFailureReasonErrorKey] = failureReason dict[NSUnderlyingErrorKey] = error error = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict) NSLog("Unresolved error (error), (error!.userInfo)") abort() } return coordinator }() lazy var managedObjectContext: NSManagedObjectContext? = { let coordinator = self.persistentStoreCoordinator if coordinator == nil { return nil } var managedObjectContext = NSManagedObjectContext() managedObjectContext.persistentStoreCoordinator = coordinator return managedObjectContext }() import Foundation import CoreData class CDPerson: NSManagedObject { @NSManaged var name: String @NSManaged var email: String @NSManaged var sex: String @NSManaged var age: NSNumber @NSManaged var data: NSData @NSManaged var prefecture: CDPrefecture } データモデル定義 クラス作成 モデル読み込み
  12. 12. Realmの場合 class RLPerson: RLMObject { dynamic var name = "" dynamic var email = "" dynamic var sex = "" dynamic var age = 0 dynamic var data : NSData? dynamic var prefecture : RLPrefecture? } クラス定義のみ! let ret = RLPerson.objectsWhere("age > %d", 40).sortedResultsUsingProperty("age", ascending: true) すぐに使える!
  13. 13. まとめ • Realmいいよ • 小規模なデータベースならどんどん使っていこう! • 公式日本語ドキュメントあります→ http:// realm.io/jp/docs/cocoa/0.90.5/ • 先日Realm Tech Talkが開催されました→ http:// togetter.com/li/787628

×