Slide 1

Slide 1 text

Realm Japan Meetup #8

Slide 2

Slide 2 text

#realm_jp

Slide 3

Slide 3 text

https://github.com/kishikawakatsumi/ kishikawa katsumi http://kishikawakatsumi.hatenablog.com/ Realm

Slide 4

Slide 4 text

Recent Updates

Slide 5

Slide 5 text

Makoto Yamazaki joins Realm ࢁ㟒 ੣͕RealmͷϝϯόʔʹՃΘΓ·ͨ͠

Slide 6

Slide 6 text

Makoto Yamazaki twitter: @zaki50 Realm and https://github.com/zaki50

Slide 7

Slide 7 text

Realm Java 0.84.0 (was 0.82.2)

Slide 8

Slide 8 text

Realm Java 0.83.0 w /6--ϓϩύςΟ w ৽͍͠ϑΝΠϧϑΥʔϚοτ w ཁϚΠάϨʔγϣϯʢ·ͨ͸!3FRVJSFEΞϊςʔγϣϯʣ w ϓϦϛςΟϒϥούʔΫϥεͷαϙʔτ *OUFHFS -POH ʜ w OVMMʹର͢ΔΫΤϦ w ूܭʢBWFSBHFɺTVNɺNBYͳͲʣͷมߋ w Y@αϙʔτ w %BUFܕ͕දݱͰ͖Δൣғͷ֦େ ਫ਼౓͸ඵͷ··

Slide 9

Slide 9 text

NULLϓϩύςΟ (Java) class User extends RealmObject { @PrimaryKey int id; @Required String name; Date birthday; // Nullable Integer age; // Nullable }

Slide 10

Slide 10 text

NULLʹର͢ΔΫΤϦ // isNull()ɺisNotNull()͕֦ு͞Ε·ͨ͠ // RealmObject, RealmListʹՃ͑ͯNullableͳϑΟʔϧυʹ΋࢖༻Մ query.isNull("age"); // ωετͨ͠ΦϒδΣΫτʹ΋࢖༻Մೳʹ query.isNull("friends.age");

Slide 11

Slide 11 text

Ξοϓσʔτ͢ΔͱMigration͕ඞཁʹͳΓ·͢ class User extends RealmObject { @Required // <= ௥Ճ String name; } // ·ͨ͸ Table userTable = realm.getTable(User.class);
 long nameIndex = userTable.getColumnIndex("name");
 userTable.convertColumnToNullable(nameIndex); !3FRVJSFEΛࢦఆɺ΋͘͠͸ϚΠάϨʔγϣϯॲཧ

Slide 12

Slide 12 text

Realm Java 0.84.0 w ඇಉظΫΤϦɾτϥϯβΫγϣϯ w ࣌ؒͷ͔͔ΔΫΤϦ΍ॻ͖ࠐΈΛόοΫάϥ΢ϯυͰߦ͏ w JT&NQUZ ɺEJTUJODU w ۭจࣈɺۭϦετʢ/6--Ͱͳ͍ʣͷ൑ఆͱɺॏෳΛআ͘ w JT$MPTFE ɺJT*O5SBOTBDUJPO ɺJT7BMJE w ૢ࡞ͷલʹ3FBMN΍ΦϒδΣΫτͷঢ়ଶ͕Θ͔ΔΑ͏ʹ w 3FBMN1SJNBSZ,FZ$POTUSBJOU&YDFQUJPOͷಋೖ

Slide 13

Slide 13 text

ඇಉظΫΤϦ RealmResults result = realm.where(User.class) .contains("name", searchText) .findAllAsync(); result.addChangeListener( new RealmChangeListener() { @Override public void onChange() { // ΫΤϦ׬ྃޙɺߋ৽͕͋Δͨͼʹݺͼग़͞Ε·͢ɻ } }); // onStop() ౳Ͱొ࿥ղআΛ๨Εͣʹ result.removeChangeListeners(); // ొ࿥͞Ε͍ͯΔશͯͷϦεφͷొ࿥Λղআ

Slide 14

Slide 14 text

ඇಉظτϥϯβΫγϣϯ realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm bgRealm) { // ͜͜ʹߋ৽ॲཧΛهड़ } }, new Realm.Transaction.Callback() { @Override public void onSuccess() { // commit ͕׬ྃͨ࣌͠ } @Override public void onError(Exception e) { // Τϥʔ͕ൃੜͯ͠τϥϯβΫγϣϯ͕ϩʔϧόοΫ͞Εͨ࣌ } });

Slide 15

Slide 15 text

։ൃத w 3Y+BWBରԠ w IUUQTHJUIVCDPNSFBMNSFBMNKBWBQVMM w IUUQTHJUIVCDPNSFBMNSFBMNKBWBJTTVFT w /FX.JHSBUJPO"1* w IUUQTHJUIVCDPNSFBMNSFBMNKBWBQVMM w IUUQTHJUIVCDPNSFBMNSFBMNKBWBQVMM

Slide 16

Slide 16 text

Realm Objective-C/Swift 0.96.2 (was 0.95.2)

Slide 17

Slide 17 text

Realm Objective-C/Swift 0.96.0 w /6--ϓϩύςΟ w ৽͍͠ϑΝΠϧϑΥʔϚοτ w ཁϚΠάϨʔγϣϯʢ·ͨ͸SFRVJSFE1SPQFSUJFTʣ w ΩʔύεɾίϨΫγϣϯɾΫΤϦ w SFBMNPCKFDUT "SUJDMF pMUFS DPNNFOUT!DPVOU w ΤϥʔϋϯυϦϯάͷվળ w ίϛοτ࣌ͷΤϥʔΛΩϟονͯ͠෮ؼͰ͖ΔΑ͏ʹ

Slide 18

Slide 18 text

Realm Objective-C/Swift 0.96.2 w 9DPEFͰϏϧυ

Slide 19

Slide 19 text

NULLϓϩύςΟ (Swift) class User: Object { dynamic var id = 0 dynamic var name = "" dynamic var birthday: NSDate? // Nullable let age = RealmOptional(0) // Nullable override static func primaryKey() -> String? { return "id" } }

Slide 20

Slide 20 text

NULLϓϩύςΟ (Objective-C) @interface User : RLMObject @property NSInteger identifier; @property NSString *name; @property NSDate *birthday; // Nullable @property NSNumber *age; // Nullable @end @implementation User + (NSString *)primaryKey { return @"identifier"; } + (NSArray *)requiredProperties { return @[@"name"]; } @end

Slide 21

Slide 21 text

Ξοϓσʔτ͢ΔͱMigration͕ඞཁʹͳΓ·͢ Migration is required for object type 'User' due to the following errors: - Property 'birthday' has been made optional. - Property 'name' has been made optional.

Slide 22

Slide 22 text

Ξοϓσʔτ͢ΔͱMigration͕ඞཁʹͳΓ·͢ Migration is required for object type 'User' due to the following errors: - Property 'birthday' has been made optional. - Property 'name' has been made optional. SFRVJSFE1SPQFSUJFTΛࢦఆ͢Δ͔ɺϚΠάϨʔγϣϯॲཧΛ ॻ͖·͢ɻ

Slide 23

Slide 23 text

ίϨΫγϣϯɾΩʔύεɾΫΤϦ class Comment: Object { dynamic var id = 0 dynamic var user: User dynamic var text = "" } class Article: Object { dynamic var id = 0 dynamic var title = "" dynamic var text = "" let comments = List() } let articles = realm.objects(Article).filter("comments.@count > 0")

Slide 24

Slide 24 text

tvOSରԠʢਐߦதʣ • https://github.com/realm/realm-cocoa/pull/2721 • https://github.com/realm/realm-cocoa/issues/2691

Slide 25

Slide 25 text

Where to find us • $ Realm Japan User Group: facebook.com/groups/realmjp • $ Twitter: twitter.com/realmJapan • GitHub: github.com/realm • $ StackOverflow: ja.stackoverflow.com/questions/tagged/realm • $ Email: [email protected] • $ Slack: slack.realm.io/

Slide 26

Slide 26 text

Realm Japan User Group $ facebook.com/groups/realmjp

Slide 27

Slide 27 text

Public Realm Slack $ slack.realm.io/

Slide 28

Slide 28 text

Official Twitter/Facebook twitter.com/realm facebook.com/655569387879379

Slide 29

Slide 29 text

Official Web site realm.io/jp

Slide 30

Slide 30 text

Next Realm Meetup • 11/?? • 19:30ʙ • Sansanגࣜձࣾ

Slide 31

Slide 31 text

http://bit.ly/RealmJP_8 ୹͍Ξϯέʔτʹ͝ڠྗ͍ͩ͘͞