2009年05月23日

アプリ開発雑記[9]

今週はダウンしてたのと、良質なゲームアプリStoneLoopsにはまったのとで、あんまりアプリ開発のお勉強は進んでいませんが、週に一度くらいは現状と今後の課題をまとめて置きたいと思います。

前回記事アプリ開発雑記[8]で挙げていた課題のうち、

  1. SQLite(データベースの作成、データの登録・抽出)
  2. 画面の切り替えをかっこよく
  3. マルチタッチの使い方
  4. TabBarでタブを選んだ時にタブバーを表示させない。
SQLiteはサンプルコードをベースになんとか操れるようになりました。Google CodeにあるようなObjective-C用のSQLite access libraryは使用しませんでした、逆に敷居高そうで。サンプルコードの解読には、SQLite本家サイトのFuction Listが一番役に立ちました。

http://www.sqlite.org/c3ref/funclist.html

sqlite3_prepareでqueryを作って、queryの"?"の数だけsqlite3_bindで引数を与えて、sqlite3_stepで実行という流れでした。以下のリンク先で検討されているような高速化云々は今のところノータッチです。



というわけで、SQLiteを操ってテーブルへのデータの追加ができるようになったのですが、ここで新しい課題が発生。テーブルのソートです。サンプルコードの"TheElement"を見る限りではNSDisctionaryとNSSortDescriptorが鍵のようです。まだアプリ完成への道は遠いな(;’д`)


今後の課題を再掲。

  1. SQLite(データベースの作成、データの登録・抽出)
  2. 画面の切り替えをかっこよく
  3. マルチタッチの使い方
  4. TabBarでタブを選んだ時にタブバーを表示させない。
  5. テーブルのソート
たまに他のアプリを触ってUIを参考にしながら、あるいはゲームで息抜きしながら、ぼちぼち進めます。
拍手する
posted by macj at 23:35 | Comment(0) | TrackBack(0) | iPhoneアプリ開発 | このブログの読者になる | 更新情報をチェックする

2009年05月16日

アプリ開発雑記[8]

平日はあんまり進められませんでした。今抱えている課題は以下のようなもの。
  1. SQLite(データベースの作成、データの登録・抽出)
  2. 画面の切り替えをかっこよく
  3. マルチタッチの扱い方
  4. TabBarでタブを選んだ時にタブバーを表示させない。("TheElement"で実現されている)


ここ最近やったこと。
  1. moto_makaさんのチュートリアルを参考に、タイマーと画像表示をお試し。
  2. SQLiteの参考サイト集め
ようは全然進んでないということです(汗)
がんばりまする。
拍手する
posted by macj at 00:00 | Comment(0) | TrackBack(0) | iPhoneアプリ開発 | このブログの読者になる | 更新情報をチェックする

2009年05月12日

アプリ開発雑記[7] SQLiteBooks その2

前回の続きです。
TabBarの中に、サンプルコード"SQLiteBooks"を埋め込んだ手順をまとめてます。

(4) やったこと(後編)

(4-1) Xcodeで作業します。SQLiteBooksからコピーしてきたコードに手を加えます。まずはAppDelegate.hから。プロジェクトに元々あったHogehogeAppDelegate
を使用するよりソースコードの編集量が少なくて済むのでこちらを使います。ハイライトしている部分が編集した部分で、コメントアウトされているのが変更前です。

UIApplicationDelegateプロトコルとUITabBarControllerDelegateプロトコルに従います。もとのAppDelegateがなぜにUIApplicationDelegateに準拠してないのかは謎。他の変更はもとのソースがNavigationControllerを持っているのをTabBarControllerに変えるのに伴ったものです。実に簡単な変更です。




#import <UIKit/UIKit.h>
// This includes the header for the SQLite library.
#import <sqlite3.h>

// Inform the compiler that the following classes are defined in the project:
@class Book, MasterViewController, DetailViewController, AddViewController, EditingViewController;

//@interface AppDelegate : NSObject {
@interface AppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {
    IBOutlet UIWindow *window;
    //IBOutlet UINavigationController *navigationController;
  IBOutlet UITabBarController *tabBarController;
    NSMutableArray *books;
    // Opaque reference to the SQLite database.
    sqlite3 *database;
}

@property (nonatomic, retain) UIWindow *window;
//@property (nonatomic, retain) UINavigationController *navigationController;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;

// Makes the main array of book objects available to other objects in the application.
@property (nonatomic, retain) NSMutableArray *books;

// Removes a book from the array of books, and also deletes it from the database. There is no undo.
- (IBAction)removeBook:(Book *)book;
// Creates a new book object with default data. 
- (void)addBook:(Book *)book;

 


@end




(4-2) 次はAppDelegate.m。長いソースですが変更箇所はわずかです。ここもTabBarControllerに絡む変更のみ。



#import "AppDelegate.h"
#import "MasterViewController.h"
#import "DetailViewController.h"
#import "AddViewController.h"
#import "EditingViewController.h"
#import "Book.h"

// Private interface for AppDelegate - internal only methods.
@interface AppDelegate (Private)
- (void)createEditableCopyOfDatabaseIfNeeded;
- (void)initializeDatabase;
@end

@implementation AppDelegate

// Instruct the compiler to create accessor methods for the property. It will use the internal 
// variable with the same name for storage.
//@synthesize books, window, navigationController;
@synthesize books, window, tabBarController;

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    // The application ships with a default database in its bundle. If anything in the application
    // bundle is altered, the code sign will fail. We want the database to be editable by users, 
    // so we need to create a copy of it in the application's Documents directory.     
    [self createEditableCopyOfDatabaseIfNeeded];
    // Call internal method to initialize database connection
    [self initializeDatabase];
    // Add the navigation controller's view to the window
    //[window addSubview:navigationController.view];
[window addSubview:tabBarController.view];

    [window makeKeyAndVisible];
}

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
    // "dehydrate" all data objects - flushes changes back to the database, removes objects from memory
    [books makeObjectsPerformSelector:@selector(dehydrate)];
}

- (void)dealloc {
    //[navigationController release];   
    [tabBarController release];   
[window release];
    [books release];
    [super dealloc];
}

(中略)

@end



(4-3) 次にもうひとつだけInterface Builderで作業をします。ApplicationDelegateになるクラスをもともとプロジェクト作成時にデフォルトで生成されていたクラスからAppDelegateクラスに変更したので、それを教えてあげなければなりません。本当は昨日加えた変更とまとめてやってしまって良いのですが、昨日書くのを忘れていたのでここで書きます(汗)。まぁ、今日関連する作業をXcodeでやった後なので、あながち悪くないのですが。

TableTry_MainWindowxib2.png
<fig. 5>


(4-4) 最後にビルドですが、もうひとつ、SQLiteを使用するには専用のフレームワークを読み込まなければなりません。グループとファイルの下のFrameworksを右クリックして”追加”から”既存のフレームワーク”を選び、数あるフレームワークの中から、libsqlite3.0.dylibを追加します。


(4-5) ビルドして実行!で完成です。わたしは実機にインストールしてます。実機だと達成感があります。

IMG_0034.PNG
<fig. 6>


(5) 最後に

今日、なにげにもう一度なにも見ずに最初からやってみましたが、またひっかかりました。ひっかかりやすいポイントをあげるならば以下の3点でしょうか。

  • NavigationViewController.xibでFile's OwnerにTable Viewを接続し忘れる
  • ApplicationDelegateをMainWindow.xibで古いままにしている(今回追記したポイントw)
  • libsqlite3.0.dylibフレームワークを追加し忘れている

3つ目はコンパイル時にエラーが出るのでわかりますが、上2つはでません。アプリの動作が止まっ
たらコンソールで確認するとヒントがでてます。

以上!




<<免責事項>>
ここに紹介した方法を参考にしてアプリケーション開発を行ったことで発生しうる如何なる問題についても、当ブログ管理者は一切責任を負いません。

タグ:iPhone SDK
拍手する
posted by macj at 01:05 | Comment(0) | TrackBack(0) | iPhoneアプリ開発 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は90日以上新しい記事の投稿がないブログに表示されております。