2012年6月29日 星期五

Facebook API 筆記

雖然先前讀書會上有同學分享過Facebook API,
但是沒有真的去實作,還真的不真到哪邊有問題。

最近因為工作上的需要所以,要用到Facebook 分享,
所以開篇文章記錄一下,方便日後搜尋。

在Facebook Developers的iOS Tutorial中,
分成了以下幾個步驟:
相關網頁:

2012年6月22日 星期五

Time Stamp

為了方便時間的計算跟儲存,
我會將時間轉換為時間戳。
相關記錄如下:

  • 時間戳說明:
    • Unix時間戳(Unix timestamp),或稱Unix時間(Unix time)、POSIX時間(POSIX time),是一種時間表示方式,定義為從格林威治時間1970年01月01日00時00分00秒起至現在的總秒數。
    • Unix時間戳不僅被使用在Unix 系統、類Unix系統中,也在許多其他操作系統中被廣泛採用。
    • 目前相當一部分操作系統使用32位二進制數字表示時間。
    • 此類系統的Unix時間戳最多可以使用到格林威治時間2038年01月19日03時14分07秒(二進制:01111111 11111111 11111111 11111111)。其后一秒,二進制數字會變為10000000 00000000 00000000 00000000,發生溢出錯誤,造成系統將時間誤解為1901年12月13日20時45分52秒。這很可能會引起軟件故障,甚至是系統癱瘓。
    • 使用64位二進制數字表示時間的系統(最多可以使用到格林威治時間292,277,026,596年12月04日15時30分08秒)則基本不會遇到這類溢出問題。
參考網頁:
http://www.haogongju.net/art/633325
轉換方式如下:
//轉換時間日期 為標籤
NSDate *temp = date;
NSTimeInterval timeInterval = [temp timeIntervalSince1970];
NSString *converFinishDStamp = [NSString stringWithFormat:@"%f",timeInterval];
return converFinishDStamp;

//轉換時間標籤 為日期
NSTimeInterval time = [stamp doubleValue];
NSDate *convertDate = [NSDate dateWithTimeIntervalSince1970:time];
    
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
[dateFormatter stringFromDate:convertDate];
return convertDate;

NSString & NSData Swap

最近常用到NSData與NSString的轉換, 記錄一下。
//NSData to NSString
NSString *swapString = [[NSString alloc] initWithData:swapData encoding:NSASCIIStringEncoding];
//NSString to NSData
NSData *swapData = [swapString dataUsingEncoding: NSASCIIStringEncoding];
另外還有與char之間的轉換
參考網頁:
http://blog.sina.com.cn/s/blog_4adf31ea0100t4y7.html

2012年6月20日 星期三

Get APP Version

因應DQA需求,要知道目前的版本號,
所以將版本號存入User Default,
並在設定中增加一欄位,顯示目前APP版本號。

取得版本方式如下:
NSString *appVersionStr = 
[NSString stringWithFormat:@"Ver.%@ Build %@",
[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"],
[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:appVersionStr forKey:@"appversion"];

Write NSString to File

為了要釐清是Server傳入的資訊有錯,還是APP的問題,
我將Server回傳的JSON字串,存在本地資料夾中,
待有需要的時候將文件取出確認。

將NSString存入本地資料夾的方式如下:
NSError *error = nil;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *areaPath = [documentsDirectory stringByAppendingPathComponent:@"area.txt"];
[areaReturnStr writeToFile:areaPath atomically:YES encoding:NSUTF8StringEncoding error:&error];

2012年6月19日 星期二

Code hight light

一直想在部落格中放上整齊的Code,Google搜尋了一下,
雖然線上有很多轉換的工具,但是大多數都不支援Objective-C的,
必須使用 C 或 C++ 來取代。

可是也因為這樣,很多Objective-C或是Cococa就顯示不出來了,
針對這個問題在搜尋之後,蠻多人都推薦syntaxhighlighter這套工具的,
雖然原本的並不支援,但是有高手解決了這個問題。
使用方式如下:
標籤1

<pre class="brush: xml">
<tag1>XML標籤1</tag1>
</pre>
NSString
NSData

<pre class="brush: objc">
NSString
NSData
</pre>

這邊要注意的地方是<pre class="brush: xml">中,
"brush: xml"代表的是要展現的語言格式,
若設定錯誤,展現的格式就會有錯哦!

另外若是設定成為不存在的語言,
syntaxhighlighter出現提示訊息。

UITextField Set Content Alignment

UITextField 文字對齊的方式除了
[textField setTextAlignment:UITextAlignmentLeft];
[textField setTextAlignment:UITextAlignmentCenter];
[textField setTextAlignment:UITextAlignmentRight];
之外,還可以針對內容做水平或垂直對齊。

垂直
typedef enum {
UIControlContentVerticalAlignmentCenter  = 0,
UIControlContentVerticalAlignmentTop     = 1,
UIControlContentVerticalAlignmentBottom  = 2,
UIControlContentVerticalAlignmentFill    = 3,
} UIControlContentVerticalAlignment;
水平
typedef enum {
UIControlContentHorizontalAlignmentCenter = 0,
UIControlContentHorizontalAlignmentLeft   = 1,
UIControlContentHorizontalAlignmentRight  = 2,
UIControlContentHorizontalAlignmentFill   = 3,
} UIControlContentHorizontalAlignment;
使用方式如下:
//垂直
[textField setContentVerticalAlignment:UIControlContentVerticalAlignmentBottom];
//水平
[textField setContentHorizontalAlignment:UIControlContentHorizontalAlignmentRight];