2011年11月14日

iOS 5 data storage的改變


由於iOS 5加入了iCloud的備份機制,資料儲存的規則多了一些規範
以下整理一下新的政策:
1.          Critical Data:只有user自行加入、或無法重新取得的檔案可以放在/Document底下,會被iTunes和iCloud備份
2.          Cached Data:可重新產生、下載的檔案,如書籍、音樂要放在/Library/Caches,不會被備份,low storage situations時會被清除
3.          Temporary Data:暫存檔放在/tmp,不會被備份,系統可能會清,官方建議不用就清除
4.          Offline Data:5.0.1新增”do not back up”的屬性,讓檔案即使放在/Document也不會被備份,且low storage situations時不會被清除,但也是建議不用就清除

此外QA1719中還提到了Offline Data:不可重新產生但會影響使用者體驗的檔案可擺在Private Documents或/Document,但如果把檔案擺在/Document則需設定好”do not back up”的屬性,否則會被reject(目前有聽過這樣的案例)

1719中也提到設定”do not back up”的方法

另可參考QA1699 Storing Private Data
過幾天再來整理一下可用的資料夾

2011年10月15日

UIWebView自定user agent

不知道忙什麼一個月就過去了
記錄一下有關自訂user agent的問題

一般request的自訂user agent可經由NSMutableURLRequest的函式達到:[request setValue:userAgentString forHTTPHeaderField:@"User-Agent"];
自訂一般UIWebView的request基本上也可以先定義好request後再由webview loadRequest:載入即可但如果要保有UIWebView裡原本request的user agent,再加入自訂的值,事情就比較麻煩一點
UIWebView預設的user agent大概長這樣:
Mozilla/5.0 (iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit/534.32 (KHTML, like Gecko) Mobile/8F190
一些值可能會隨版本而變動,可參考Safari Web Content Guide

2011年9月8日

XML Parser心得分享(2)-TBXML

另外一套是蠻多人推薦的TBXML
主要用法就是讀入檔案,然後用[TBXML elementName:element], [TBXML textForElement:element]取值
詳細可參照TBXML網站
因為開始第一次用,而且每次都要針對新的XML重新寫一遍delegate覺得很麻煩

就找了一下資料 ,後來參照了iOS下超级簡潔的xml解析框架:TBXML
修改了一下原始碼如下:

- (void)parse{
if (xmlData.rootXMLElement) {
TBXMLElement *element = xmlData.rootXMLElement;
[self recurrence:element];
}
else {
NSLog(@"Format Error!");
}
}

//遞迴
- (void)recurrence:(TBXMLElement *)element {
do {
//NSLog(@"<%@>:{%@}",[TBXML elementName:element], [TBXML textForElement:element]);
// Display the name of the element
if ([dic objectForKey:[TBXML elementName:element]]) {//如key name重複,命名為parent_chlid
[dic setObject:[TBXML textForElement:element] forKey:[NSString stringWithFormat:@"%@_%@",[TBXML elementName:element->parentElement],[TBXML elementName:element]]];
}
else{
[dic setObject:[TBXML textForElement:element] forKey:[TBXML elementName:element]];
}

//迭代處理所有屬性
TBXMLAttribute * attribute = element->firstAttribute;
while (attribute) {
//顯示
//NSLog(@"<%@>->[%@ = %@]", [TBXML elementName:element], [TBXML attributeName:attribute], [TBXML attributeValue:attribute]);
//迭代
attribute = attribute->next;
}

//遞迴處理子樹
if (element->firstChild) {
[self recurrence:element->firstChild];

}

//迭代處理sibling
} while ((element = element->nextSibling));

}

執行完會存成一個巢狀的NSDictionary結構
這樣應該可以處理稍微複雜一點、包含attribute的xml

2011年8月29日

XML Parser心得分享(1)-NSXML

有網友留言問到XML處理,就把之前的草稿完成一下
怕文章太長不好讀,拆成兩篇寫
寫到現在遇過挺多處理case要xml資料
目前用過的XML parser有內建的NSXML和TBXML


這篇先簡單說明一下NSXMLParserDelegate三個重要的函式:

2011年8月23日

兩個目前遇過的iOS 5 SDK crash bug

紀錄一下兩個升級iOS 5 SDK後遇到的error:


1. iOS 5好像還不太支援UIActivityIndicatorView
錯誤訊息:-[UIImage initWithCoder:]: unrecognized selector sent to instance 0xc974760
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage initWithCoder:]: unrecognized selector sent to instance 0xc974760'
參考自:http://stackoverflow.com/questions/7023430/uiimageview-initwithcoder-unrecognized-selector-sent-to-instance-ios-5-beta
解決方法:只好先把indicator移掉,或者用4.3 SDK跑就沒事

2.  一些專案不能用4.3 simulator跑
錯誤訊息:dyld: Library not loaded: /usr/lib/libc++abi.dylib ............. Reason: image not found
解決方法:先用5.0 simulator跑

debug了半天才知道是iOS 5的問題,目前還沒看到解法,看來只能等官方修正了
真的有案子要交的還是要準備兩套SDK阿阿阿