Hatena::ブログ(Diary)

abachibiの日記

2014-03-28

時間を進捗ベースでリスト管理できるiOSアプリ「Targets」をリリースしました

| 22:05 | 時間を進捗ベースでリスト管理できるiOSアプリ「Targets」をリリースしましたを含むブックマーク

カテゴリーごとに目標時間を設定し、カテゴリー内のタスクの時間を計測することで

時間ベースの進捗管理ができます。

カテゴリーのカラーも6色から選択できます。

セクション部分のカラーとして使ったり、UITableViewCellの背景色にも透過率を変えて使ったりして、

リストをカラフルにしてみました。


タスクについては実際の時間を簡易ストップウォッチで記録していき、

完了チェックを付けると進捗に反映されます。


技術的には、CoreDataの本を一通り読んで理解したので実装に無駄をなくしました。

(まだあるかもしれませんが、後ほど見直します...)

以下の技術書は本当に良書です。大変お世話になりました...m(_ _)m

iOS Core Data徹底入門

iOS Core Data徹底入門


それと、UITableViewのセクション部分のタップ処理をどう実装するかをいろいろとググって解決しました。

アプリの内容は大変シンプルなものですが、今までに実装したアプリでは使ってなかったUICollectionViewや、

セクション部分のみ表示するようにしたり個人的には壁に打ち当たりながらも何とか進めてきました。


初期の実装では、ViewDeckを使ってみたり(GMailアプリにある左側にスライドして出る仕組み)、

レベルと経験値の概念を入れてみたりしたのですが、コンテンツ不足のためお蔵入りになってしまいました。

いつかはリベンジしたい!

f:id:abachibi:20140414175000p:image:w300


ということで、当アプリをぜひ使ってみて下さい。

2013-03-17

NSUserDefaultsを使ってデータを保存

| 11:13 | NSUserDefaultsを使ってデータを保存を含むブックマーク

アプリ内でデータを保存する場合にCoreDataを使うという手もありますが、

テーブル定義が〜とか定義を変更した時にマイグレーション処理が〜など色々とめんどいので、

代わりにNSUserDefaultsを使って比較的楽に保存する方法があります。


NSUserDefaultsは、iPhoneiPadのアプリの設定画面の情報を

取得したり設定できるクラスです。


二郎系アプリでは設定画面は用意していませんが、

NSUserDefaultsを使ってお気に入り機能を実装しました。

お気に入り登録したお店情報リスト(NSData)をまるっと保存しています。


・保存時

//お店情報リスト
NSArray *shopList = [NSArray arrayWithObjects:@"お店1", @"お店2", @"お店3", nil];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//お店情報リスト(NSArray)をデータ化(NSData)
NSData *shopData = [NSKeyedArchiver archivedDataWithRootObject:shopList];
//shopListキーを指定してデータを保存
[defaults setObject:shopData forKey:@"shopList"];
if (![defaults synchronize]) {
	NSLog(@"defaults setObject error");
	return;
}

・取得時

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//shopキーのデータを取得
NSData *shopData = [defaults dataForKey:@"shopList"];
//データをリスト化
NSArray *shopList = [NSKeyedUnarchiver unarchiveObjectWithData:shopData];

2013-03-16

繰り返し学習時間を記録するiOSアプリ「StudyLap」をリリースしました

| 09:44 | 繰り返し学習時間を記録するiOSアプリ「StudyLap」をリリースしましたを含むブックマーク

問題集などで繰り返し学習する際、問題を解いた時間を記録し並べて表示できる

iOSアプリ「StudyLap」をリリースしました。


基本的にはラップ付きタイマーと同じですが、1回目、2回目・・・と繰り返し

問題を解いた後、問題ごとに解いた時間の比較しやすいように横に並べて表示します。


・画面

f:id:abachibi:20130316093637p:image:w300



また、問題ごとにアラーム設定ができるので、

例えば1問3分みたいに目標解答時間を設定して、時間内に解けなかったら

アラームを鳴らすという使い方ができます。


おまけで記録時間のメール送信機能を付けました。


デフォルトではミリ秒は表示されませんが、

iOSの設定 -> StudyLap -> ミリ秒を表示

でオンオフの切り替えができます。


ぜひ、ご活用ください。


2013-01-03

OS移行時にカスペルスキーのアクティベーションでトラブル → サポセンで解決

| 23:55 | OS移行時にカスペルスキーのアクティベーションでトラブル → サポセンで解決を含むブックマーク

先日、興味本位でWindows8 Pro 64bitを使ってみたくて、

現行のWindow7 Home 32bitから変えてみました。

そこで、使用中の「カスペルスキー 2013 マルチプラットフォーム セキュリティ」

(3年3台使えるやつ)のアクティベーションを解除してWindows8をインストール。

インストール完了後にカスペルスキーをインストール&アクティベーションしようとしたら

「すでにアクティベーション数を超えています」みたいなエラーが表示されて弾かれました。


いや、3台もアクティベーションしてないし、さっき1個解除したし…。

と、心の中で叫んでも一向に解決しないので、マイカスペルスキー

テクニカルサポートセンターにフォームで問い合わせしました。(要アカウント作成)


実はカスペルスキー製品のサポートページは、カスペルスキーストアにも似たようなページがあって迷いました。

ストア側のページではどうも対応出来なさそうだったので、マイカスペルスキーで以下の手順で進めました。


  1. アカウントを作成
  2. ログイン
  3. 画面左のメニューから「アクティベーションコードを管理」を選択
  4. アクティベーションコードを追加
  5. 画面左のメニューから「お問い合わせの送信」
  6. お問い合わせ送信タブを選択して、お問い合わせ作成ボタンをクリック

大体、中1日くらいで返信が来ました。

結局、直接の原因は分かりませんでしたが、何かのタイミングでアクティベーションが解除できなくなる不具合があるそうです。

こちらではどうしようも出来ないので、新しいアクティベーションコードを発行していただきました。

旧コードは使えなくなるので再度設定が必要ですが。

サポートの対応も好感が持てたので、不満は残らず無事解決出来て良かったです。


Windows8は結局使いこなせなくてWindows7に戻してみたり、

無駄な作業が増えまくった年末でした。

うーん、OSのインストールは鬼門か…。

2013-01-02

任意にタブバー内の指定のタブに移動する方法

| 23:24 | 任意にタブバー内の指定のタブに移動する方法を含むブックマーク

ボタンタップ時などの任意の処理でタブバーの表示タブを切り替える方法です。

TabBarControllerに対して、以下のように複数のTabBarが設定されている状態とします。

f:id:abachibi:20130102225053p:image:w400


f:id:abachibi:20130102225054p:image:w600


TabBar内のViewControllerからUITabBarControllerにアクセスできるので、

UITabBarControllerの選択状態を設定できます。


まずはインデックスを設定する方法。

TabBarのインデックスは左のタブから0, 1, 2...と設定されているので、

一番左を表示したい場合は0を設定します。

上のイメージだとCurrentタブ切り替わります。


・選択インデックスを設定して表示切替

//0 = 一番左のTabBarを設定
self.tabBarController.selectedIndex = 0;

他にも、あまり使う頻度はないかもしれませんが、

子ViewControllerでNavigationControllerのrightBarButtonItemの処理を実装している場合、

実装されている子ViewControllerのタブに切り替えるには以下のようにします。


・選択ViewControllerを設定して表示切替

//実装されているViewControllerを設定(ViewControllerのViewを表示)
self.tabBarController.selectedViewController = self;

処理がListタブのViewControllerに実装されていれば、他のタブを表示していても

Listタブに切り替わります。