2015年10月26日 星期一

[iOS] 如何加入ObjClean

ObjClean官網去填你要遵循code的格式
會產生一個StyleSettings.plist
再來下載ObjClean主程式
打開程式後把要使用ObjClean的專案拉過去
會自動產生一個Run Script
再把產生的StyleSettings.plist拉到專案裡面去就可以了

[iOS] 關掉Magical Record的Log

http://stackoverflow.com/questions/12908584/disable-magicalrecord-error-messages-and-warnings

2015年10月21日 星期三

[Blog] 在Blogger呈現程式碼格式

在Blog上呈現程式碼樣式可以使用SyntaxHighlighter
詳細的教學可以參考http://pydoing.blogspot.tw/2010/11/syntaxhighlighter-blogger.html

在嵌入Script設定時可以使用
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.defaults['toolbar'] = false;
SyntaxHighlighter.all();

這樣就不會一直出現廣告了
可以參考如何移除SyntaxHighlighter廣告

2015年10月16日 星期五

[iOS] 資料可儲存的地方

- NSUserDefault

一般來說,小規模數據,弱業務相關數據,都可以放到NSUserDefault裡面,內容比較多的數據,強業務相關的數據就不太適合NSUserDefault了

- KeyChain

Keychain是蘋果提供的帶有可逆加密的存儲機制,普遍用在各種存密碼的需求上。另外,由於App卸載只要系統不重裝,Keychain中的數據依舊能夠得到保留,以及可被iCloud同步的特性,大家都會在這裡存儲用戶唯一標識串。所以有需要加密、需要存iCloud的敏感小數據,一般都會放在Keychain。

- 文件儲存

文件儲存包括了Plist、archive、Stream等方式,一般結構化的數據或者需要方便查詢的數據,都會以Plist的方式去持久化。 Archive方式適合儲存平時不太經常使用但很大量的數據,或者讀取之後希望直接對象化的數據,因為Archive會將對象及其對象關係序列化,以至於讀取數據的時候需要Decode很花時間,Decode的過程可以是解壓,也可以是對象化,這個可以根據具體中的實現來決定。 Stream就是一般的文件存儲了,一般用來存存圖片啊啥的,適用於比較經常使用,然而數據量又不算非常大的那種。

- 資料庫儲存

資料庫儲存的話​​,花樣就比較多了。蘋果自帶了一個Core Data,當然業界也有無數替代方案可選,不過真正用在iOS領域的除了Core Data外,就是FMDB比較多了。數據庫方案主要是為了便於增刪改查,當數據有狀態和類別的時候最好還是採用數據庫方案比較好,而且尤其是當這些狀態和類別都是強業務相關的時候,就更加要採用數據庫方案了。因為你不可能通過文件系統遍歷文件去甄別你需要獲取的屬於某個狀態或類別的數據,這麼做成本就太大了。當然,特別大量的數據也不適合直接存儲數據庫,比如圖片或者文章這樣的數據,一般來說,都是數據庫存一個文件名,然後這個文件名指向的是某個圖片或者文章的文件。如果真的要做全文索引這種需求,建議最好還是掛個API丟到伺服端去做。

2015年10月15日 星期四

[iOS] NSMutableArray sort by localizations

根據各個語言對NSMutablewArray裡的字串做排列
NSString *systemLanguate = [[[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0] substringToIndex:2];
NSString *localizationKey;
if ([systemLanguate isEqualToString:@"ja"]) {
  localizationKey = @"ja";
} else if ([systemLanguate isEqualToString:@"ja"]) {
  localizationKey = @"zh_TW";
} else {
  localizationKey = @"en";
}

//如果array裡是NSDictionary的值要做排序可以用key.property來得到裡面的字串

NSString *descriptorKeyString = [NSString stringWithFormat:@"display_names.%@", localizationKey];

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:descriptorKeyString ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];

self.sortAry = [self.sortAry sortedArrayUsingDescriptors:@[descriptor]];