2009年10月14日水曜日

メカトロテックジャパン2009 1日目

手作り感であふれている、弊社ブースの様子をお伝えします。

2009年10月10日土曜日

いよいよ来週メカトロテックジャパン2009が開催されます

14日から開催されるメカトロテックジャパン2009で使用するデモ機等をまとめて今日発送しました。
秋田から名古屋への発送なので、2日はかかると思い今日発送しました。

現地には10/13午後から入って準備する予定です。

会場からは写真等で雰囲気等を伝えられればと思っています。

現地では一人で対応するので、いたらない点もあるかと思いますが、よろしくお願いします。

みなさまのお越しをお待ちしております。

2009年9月16日水曜日

メカトロテックジャパン2009へ出展のお知らせ

メカトロテックジャパン2009が来月の、10月14(水)〜17(土)の期間ポートメッセなごやにて開催されます。



弊社では、この展示会にPLCのモニターや操作を行うiPhoneソフトを出展致します。

既にAppStoreに公開されているioTouch freeや開発中のioTouch freeの次期バージョン、新規投入予定のirPanelの展示、実演デモを行ないます。

また、三菱電機製のQシリーズ(内蔵EthernetCPU)へ対応する予定です。

より多くのみなさまに、実際に手に取って体験していただき、ご意見ご感想を拝聴したいと思いますので、ぜひご来場頂きます様お願い申し上げます。

一号館1C20にてお待ちしております。

尚、メカトロテックジャパン2009ホームページより事前来場登録していただきますと、入場料(1,000円)が無料になりますので事前来場登録をお勧めします。

数に限りはありますが、展示会の無料招待券付開催のご案内をお送りすることもできます。ご希望される方は問い合わせページよりご連絡頂ければ対応させていただきます。

2009年8月27日木曜日

Ciderにact as listを実装中

Ruby On Railsのact_as_listモジールの機能をCiderへの追加作業をしています。

listブランチの方で作業していて、どんどん変わる可能性があります。


モデルに"position"という属性を追加すると、自動的に番号が入力され、テーブルに表示する時に順番が保たれる様になります。
まだ、番号を付けるだけで移動時の番号の振り直しは対応してませんが、これから実装していきたいと思います。

positionを別の属性にしたい場合はカスタムクラスで、+[NSManagedObject listAttributeName]を書き換えて適切な属性の名前を返す様にして下さい。

scopeを用いる場合は+[NSManagedObject listScopeName]を書き換えて、リレーション名を返す様にして下さい。
リレーション先毎に番号が割り振られます。


追記:
willSaveで処理してますが、awake...で処理した方が良いと思い試してみましたが、この時点ではまだscopeで設定されたリレーションが設定されていないので、うまく行きそうになかったです。
KVOを使ってscopeで設定されたリレーションが設定された時に処理する様にしてみましたが、複雑になって来て簡単に行きそうでなかったので、見送りました。

2009年8月6日木曜日

Cider 0.2.0リリースしました

CiderにCoreData検索用メソッドを追加しました。

テストコードにありますが、データはこの様に準備します。

[[ISMovie create] setTitle:@"Star Wars IV"];
[[ISMovie create] setTitle:@"Star Wars VI"];
[[ISMovie create] setTitle:@"Star Wars V"];


検索はこの様に出来ます。

全件検索なら

NSArray *result = [ISMovie findAll:nil error:NULL];


絞り込み(複数件数)

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title BEGINSWITH %@", @"Star Wars"];
NSArray *sortDescriptors = [NSSortDescriptor sortDescriptorsWithString:@"title asc"];
NSArray *result = [ISMovie findAllWithPredicate:predicate sortDescriptors:sortDescriptors error:NULL];


絞り込み(1件)

NSError *error = nil;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title = %@", @"Star Wars IV"];
NSArray *sortDescriptors = [NSSortDescriptor sortDescriptorsWithString:@"title desc"];
ISMovie *movie = [ISMovie findWithPredicate:predicate sortDescriptors:sortDescriptors error:NULL];



Objective-CなのでRailsほどスッキリする訳ではありませんが、素のCoreDataを使うよりは幾分スッキリすると思います。

2009年8月3日月曜日

Cider 0.1.3リリースしました

CiderにNSManagedObjectContextとNSManagedObjectの生成用のメソッドを追加しました。
良かったら使ってみて下さい。

NSManagedObjectContextの生成は幾つかの手順を踏む必要があります。
最も簡単な構成であれば、手順は同じなのでメソッド1つで生成出来る様にしました。

+ (id)defaultManagedObjectContextでアプリケーションで共通に使えるNSManagedObjectContextが得られます。


NSManagedObjectContext *context = [NSManagedObjectContext defaultManagedObjectContext];

保存先を指定したい場合は+setDefaultStoreURL、+setDefaultStoreFile:を使用します。

この他にも、-managedObjectContextWithURL: 、-managedObjectContextWithFile:もあります。


NSManagedObjectもカスタムクラスを用いた場合は+creatで得られるので簡単です。
(この場合は[NSManagedObjectContext defaultManagedObjectContext]が用いられます)

// IOMovieはカスタムクラス
IOMovie *movie = [IOMovie create];



今後はfind系の所に手を入れたいと思ってます。
まだ考えがまとまっていないので、公開出来るのはまだまだ先になると思います。

2009年8月1日土曜日

Cider 0.1.1リリースしました

CiderにNSErrorを拡張するコードを追加しました。
特にCoreDataを用いているとNSErrorを扱う機会が増えて来ます。
また、CoreDataが返すNSErrorにはエラーがネストした状態で返って来ます。
この中から、自分が扱いたいドメインのエラーを返したり、エラー内容をUIAlertViewに表示させるメソッドを追加しています。


NSManagedObjectクラスを継承したクラスでvalidationを書きます。
この時にdomainを独自のドメイン(MyDomain)のNSErrorオブジェクトを返します。

- (BOOL)validatePortNo:(id *)ioValue error:(NSError **)error
{
NSInteger value = [*ioValue intValue];
if (value < 1000 || value > 65535) {
NSDictionary *userInfoDict = [NSDictionary dictionaryWithObject:@"1000から65535までにして下さい" forKey:NSLocalizedDescriptionKey];
*error = [NSError errorWithDomain:@"MyDomain" code:1000 userInfo:userInfoDict];
return NO;
} else {
return YES;
}
}


-save:で返るerrorはCoreDataのドメインの場合があり、MyDomainのエラーはその中にネストされた状態で返る事があります。
-showErrorForDomain:でMyDomainを指定する事で、-validatePortNo:で返したエラーを捕まえる事が出来き、そのままUIAlertViewに表示します。

NSError error = nil;
[self.managedObjectContext save:&error]
if (error) {
[error showErrorForDomain:@"MyDomain"];
}