2015年10月4日日曜日

[xcode7] swift2.0 sqliteをつかう

■ sqlite.tbdでなくを指定する方法libsqlite3.dylib
Framework追加下部Add other..ボタン
通常は/usrにいけないので、「cmd +  shift + G」で /usr/lib/を指定
libsqlite3.dylibを選択


■ Bridge-Header.hを作成
#import を書く

build settingにあるObjectiveC-Bridging Headerに指定
$(SRCROOT)/$(PROJECT)/xxxxxxxxxxxxx.h

これで、SQLiteがswiftでつかえるようになるので、buildも、コード補完もするようになる
sqlite.tbdでうまくいかなかったと思って、むりやりlibsqlite3.dylibをもってきたが、
Bridge-Header.hをちゃんと設定したらsqlite.tbdでも問題ないようだ。


■ tableの作成(swift2.0)
        var documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
        documentsPath = (documentsPath as NSString).stringByAppendingPathComponent("main.sqlite")
        print(documentsPath)
        
        var db:COpaquePointer = nil;
        sqlite3_open(documentsPath, &db)
        
        let sql1="CREATE TABLE IF NOT EXISTS dbm (key text PRIMARY KEY,value text)";
       
        var zErrMsg :UnsafeMutablePointer = nil;
        sqlite3_exec(db, (sql1 as NSString).UTF8String , nil, nil, &zErrMsg);

ここまでて、テーブルの作成を確認


■ ここまでするなら、簡単にObjective-cで書いてbindingする方が簡単な気がする

2012年10月17日水曜日

[Objective-c]時間の取得・文字列からの変換

■時間のフォーマット
    NSDate *now = [NSDate date];
    NSCalendar * cal = [NSCalendar currentCalendar];
    NSDateComponents *comps = [cal components:NSYearCalendarUnit |
                                   NSMonthCalendarUnit  |
                                   NSDayCalendarUnit    |
                                   NSHourCalendarUnit   |
                                   NSMinuteCalendarUnit |
                                   NSSecondCalendarUnit
                                         fromDate:now];

    NSLog(@"%@",comps);
  
  compsから年、月等を個別に取得する。取得する値は自分のタイムゾーン。

■文字列から時間へ
    NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSDate* date = [formatter dateFromString:@"2012-04-05 13:12:12"];
    [formatter release];
    
    NSLog(@"%@",date);//出力 2012-04-05 04:12:12 +0000

    指定した時間を、自分のタイムゾーンに応じて変換しているみたい。

2012年10月9日火曜日

xcode pragma mark


#pragma mark - //セパレータ
#pragma mark comment 
// FIXME: comment
// MARK:  comment
// TODO: comment
// !!!: comment
// ???: comment
// ttt: comment //できない

2012年10月8日月曜日

[iOS]ViewControllerでtouchesBeganやボタンのイベントをとるときの注意

以下のようなソースでは、touchesBeganやボタンのイベントはとれない。
 
hpListViewController* listViewController=[[[hpListViewController alloc]initWithFrame:rect]autorelease];

[contenaView addSubview:listViewController.view];
なぜなら、viewはaddSubViewされて保持されるが viewControllerはどこにも関連がないので、解放されてしまう。 だから、利用時にメモリ違反をおこす。 以下のように、retainするか、配列などで保持して、解放されないようにしよう。
 
hpListViewController* listViewController=[[[hpListViewController alloc]initWithFrame:rect]retain];

[contenaView addSubview:listViewController.view];

2012年10月2日火曜日

[iOS]絵の一部を表示

   CALayer* test=[CALayer layer];
    test.contents=(id)[UIImage imageNamed:@"test.png"].CGImage;
    test.frame=CGRectMake(0, 100, 60, 60);
    test.contentsRect=CGRectMake(0.0f, 0.0f, 0.33f, 1.0f);
    [self.view.layer addSublayer:test];
基本,画像はサイズにfitする。test.contentsRectをしていすることで、絵の部分を指定することが可能になる。
指定は、割合で指定する。

2012年9月27日木曜日

CAEmitterLayer

CAEmitterLayerがiOS5から利用できる。

Emitte:発光体

particleなのかな。

以下のサイトが説明がよい。

UIKit Particle Systems in iOS 5 Tutorial

2012年9月22日土曜日

C++ 標準のライブラリがリンクエラーする

まずは、拡張子を「.mm」にすることを確認してみる。
ヘッダーファイルで読み込まれたらそこは、mmにしなくてはいけない。

個人的にはできるだけ、object-cとc++の接点を少なくしておきたい。