2012年9月2日 星期日

將相機畫面加到自己的 View 裡面

基本上我們要使用相機來擷取畫面時都是呼叫一個新的 ViewController 出來使用
不過有些時候需要一啟動 App 就載入相機的畫面
這時候有兩個方式:
一個是在 AppDelegate.m 中直接將 UIImagePickerController 加入 rootViewController 中
不過要是需要自定相機的介面的時候就會比較麻煩,因為基本上不會在 AppDelegate.m 中寫太多程式在裡面

另一個是就是跟一般 UI 元件一樣加到現在這個 ViewController 中
用的方法如下:
UIImagePickerController *pickerView = [[UIImagePickerController new] autorelease];
[[self view] addSubview:[pickerView view]];

這樣子就可以在 ViewController.m 中編寫相機的相關功能,而且自定相機介面的時候也不會那麼麻煩。

2012年8月4日 星期六

2012年7月26日 星期四

查詢計算未來幾天後的日期

有時候需要去計算未來幾天後的日期,
不過 Objective-C 有計算未來幾秒後的功能,用的是
[NSDate dateWithTimeIntervalSinceNow:second];
這是可以計算未來幾天後的日期,
不過如果要算一個月後了?
因為一個月有分大月與小月,另外還有潤年的問題,
用這個算法就不實用,所以我找到了另一個方法,
還記得我之前說的 FMDB 嗎?
在 SQL 語法中剛好有這項功能,
所以可以直接使用,這樣子可以省下判斷大月與小月的時間,
只不過使用 SQL 時會增加記憶體的使用,
這是犧牲記憶體容量來縮減判斷時間的作法,
那麼要如何做了?

在 SQL 語法中查詢未來天數的寫法是,
SELECT DATE('2012-07-26', '+ X day');
其中 "+ X day" 的 X 就是要增加的天數,
如果要增加的月份的時候就改成 "+ X month" 就好了,
同理,要增加年份也是一樣的,
還有如果改成 "- X day" 的時候是計算過去的日期,
另外日期的格式必須要是 "YYYY-MM-DD" 的格式才行,

還有另一個是格式化輸出的日期,語法如下
SELECT STRFTIME('%Y-%m-%d','2012-07-26');
因為上面的輸出格式是固定的,不過有時候會想要改變輸出的格式,
所以就需要這個語法了,
其中 %Y 指的是年,%m 指的是月份,%d 指的是日期,
只要在這三個之間插入不同的東西就會輸出不同的格式,
像是 "%Y年%m月%d日" 就會輸出 "2012年07月26日"。

所以就結合 FMDB 的方式來計算未來幾天後的日期做成了一個 Method,
- (NSString *)seachFutureDate:(NSString *)date withDay:(int)day andFormate:(NSString *)formate{
FMDatabase *db = [FMDatabase databaseWithPath:nil];

if (![db open]) {
NSLog(@"DB Can't Open");
}

NSString *dayStr = [NSString stringWithFormat:@"+%d day", day];

FMResultSet *rs = [db executeQuery:@"SELECT STRFTIME(?,DATE(?, ?));", formate, date, dayStr];

NSString *dateStr = [[NSString new] autorelease];

while ([rs next]) {
dateStr = [rs stringForColumnIndex:0];
}

[db close];

return dateStr;
}

因為這個查詢的動作不需要真的有資料庫的檔案才能做,
所以不會佔用任何資料空間,
而且只要小小的修改就能變成查詢幾月後的日期與幾年後的日期了,
這樣子計算天數會更加方便。

OS X 10.8 Mountain Lion

從二月發表等到現在才正式公開下載的 Mountain Lion
有人下載了嘛?

App Store 連結:http://itunes.apple.com/tw/app/os-x-mountain-lion/id537386512?l=zh&mt=12

另外 Xcode 在 Mountain Lion 中需要更新為 4.4 版才能繼續使用

App Store 連結:http://itunes.apple.com/tw/app/xcode/id497799835?l=zh&mt=12