Upload
ssd-kfk
View
1.173
Download
5
Embed Size (px)
Citation preview
CouchbaseLiteが さらに使いやすくなってた
上津原 一利 !
at Couchbase Meet Up 2013/12/12
自己紹介•転職しました • Couchbase Liteネタ担当 • iOSアプリ開発 •でも何故か今はOculus Riftやってます • http://ssdkfk.wordpress.com/ • 前回のスライドは1023PV(9ヶ月で)
本題
Couchbase Lite Beta 1.0
いつの間にか出てました ※2013/9/13
便利になってる!
CouchbaseとのSyncもできるようになってた! !
UITableView用のデータソースの提供が!
やったね!
便利!
具体的には
• CBLUITableSourceが追加 • Couchbase Sync Gatewayを利用して Couchbaseと同期。Facebook認証なども
• etc…
(※目に見えて明らかに追加されたもの)
CBLModelただ、ちょっとその前に…
前回の発表では
DocumentはNSDictionary(連想配列)で作り Databaseにputする
ドキュメントの作成は…
と言いましたが…
今回
CBLModelを作成しプロパティを設定 モデルをインスタンス化し、値を入れてSave
が、スマート
AppDelegate *ap = (AppDelegate *)[[UIApplication sharedApplication] delegate]; // ドキュメントを追加 NSDictionary *contents = @{@"text" : @"Hello couchbase Lite", @"check" : [NSNumber numberWithBool:NO], @"created_at" : [CBLJSON JSONObjectWithDate: [NSDate date]]}; // 無記名ドキュメントの取得 CBLDocument* doc = [ap.database untitledDocument]; // ドキュメントの追加 NSError* error; if (![doc putProperties: contents error: &error]){ // 失敗 }
AppDelegate *ap = ApplicationDelegate; ExampleModel *model = [[ExampleModel alloc] initWithNewDocumentInDatabase:ap.database]; model.text = @"Hello CouchbaseLite!"; model.created_at = [NSDate new]; model.check = NO; NSError *err; if (![model save:&err]) { NSLog(@"Save Error!"); }
前回
今回
モデルクラス
@interface ExampleModel : CBLModel !@property (nonatomic, copy) NSString *text; @property (nonatomic, strong) NSDate *created_at; @property (assign) BOOL check; !@end
@implementation ExampleModel !@dynamic text,created_at,check; !@end
ExampleModel.h
ExampleModel.m
CBLModelで使えるクラス
・NSNumber ・NSNull ・NSString
・NSArray
・NSDictionary.
・int ・double ・BOOL ・NSData ・NSDate
・NSDecimalNumber ・CBLModel
CBLModelが入る!
CBLModelにCBLModelが入れられる !
つまり !
リレーションを組むことが可能!
具体的には@class ExampleModel; !@interface SecondModel : CBLModel !@property (assign) ExampleModel *model1; @property (nonatomic, copy) NSString *comment; !@end
{ text : "Hello CouchbaseLite!", created_at : "2013-12-12", check : false, comment : "Wonderful!", }
もちろん、コード内ではプロパティ通りに クラスに格納されて返ってきます
使いやすい!
こっちのが断然便利なので CBLModelをがんがん
使ったほうがいいと思います
CBLUITableSource
CBLTableViewSourceって
• UITableView • UITableDataSource • LiveQuery
こいつらが全部 まとまったやつ
つまり何が便利?使わなかったら
•UITableView実装 • LiveQuery実装 •再描画実装
使ったら
• CBLTableView実装
カスタム性CBLTableDelegateで
- (UITableViewCell *)couchTableSource:(CBLUITableSource*)source cellForRowAtIndexPath:(NSIndexPath *)indexPath; !- (void)couchTableSource:(CBLUITableSource*)source willUpdateFromQuery:(CBLLiveQuery*)query; !- (void)couchTableSource:(CBLUITableSource*)source updateFromQuery:(CBLLiveQuery*)query previousRows:(NSArray *)previousRows; !- (void)couchTableSource:(CBLUITableSource*)source willUseCell:(UITableViewCell*)cell forRow:(CBLQueryRow*)row; !- (bool)couchTableSource:(CBLUITableSource*)source deleteRow:(CBLQueryRow*)row; !- (void)couchTableSource:(CBLUITableSource*)source deleteFailed:(NSError*)error;
使うには?
ブログにまとめました
Couchbase LiteのCBLUITableSourceを 動かしてみた
※カスタムはまだです
CouchbaseとSync
やっときた
今までCouchDBのみとSyncだったけど !
ついにCouchbaseとSync出来るように!
Couchbase sync gateway
http://www.couchbase.com/communities/couchbase-sync-gateway
ゲートウェイが必要
でもCouchDBと同じように実装すると PushはできてもPullができない…
NSArray *repls = [ap.database replicateWithURL:[NSURL URLWithString:@"http://127.0.0.1:4984/sync_gateway"] exclusively:YES]; self.pull = [repls objectAtIndex: 0]; self.push = [repls objectAtIndex: 1]; ! // completeではなく、modeを取得する // completeの場合、completeしない場合があるため。 [_pull addObserver:self forKeyPath:@"mode" options:0 context:NULL]; [_push addObserver:self forKeyPath:@"mode" options:0 context:NULL];
できたそうです。{ "interface":":4984", "adminInterface":":4985", "log":["REST"], "databases":{ "sync_gateway":{ "server":"http://couchbase-jp:8091", "bucket":"sync_gateway", "sync":`function(doc) {channel(doc.channels);}` }, "todo":{ "server":"http://couchbase-jp:8091", "bucket":"todo", "sync":`function(doc) {channel("public");}`, "users": { "GUEST": { "disabled": false, "admin_channels":["public"] } } } } }
子、曰くconfig.json
だそうです(まだ僕は動かせてません)
まとめ
•結構使いやすいものになってきた •問題は、SQLiteとの使い分け •メリットはAPIなしでのSyncが可能な点 •クエリだけでなくCouchbaseの知識は必要 •でもサーバーサイド覚えるよりは楽だよね?
まずは事例を
企業レベルではちょっとハードルが高いから 個人デベロッパーから使っていって 実績を作っていきましょう。
年末になにか作って また何か報告します。
おしまい