2014年4月21日 星期一

[iOS] 使用 ASIHTTPRequest 函式庫遇到 502 error 處理小記

目前在使用與伺服器溝通的第3方函式庫中,多數常用 ASIHTTPRequest 或 AFNetworking,而 ASIHTTPRequest 停止更新後,都改用 AFNetworking 比較多。最近在處理舊專案是使用 ASIHTTPRequest 時,突然出現了 Server Error
502 - Web server received an invalid response while acting as a gateway or proxy server 的錯誤訊息。

由於伺服器環境是使用微軟的 Azure WebSites,發生的原因是 Azure 無法處理 user-agent 的問題導致,解決方法是設定一下 user-agent 即可,如:[ASIHTTPRequest setDefaultUserAgentString:@"MyApp 1.0"]。

2014年3月29日 星期六

[iOS] UITableViewCell 在 iOS 7 的分割線左邊少 20 個 pixel 補滿的方法小記

if([_tableView respondsToSelector:@selector(setSeparatorInset:)])
{
    [_tableView setSeparatorInset:UIEdgeInsetsZero];
}

2014年3月18日 星期二

[iOS] NSGenericException 錯誤小記

在使用 NSMutableArray 時,經常會對陣列中的元素做增減的動作,而在做元素刪除時,若有使用 foreach 來遍歷各個元素比對後刪減,就會發生 NSGenericException 的錯誤。

原因是只要在 foreach 裡做刪減時會將陣列的值全部失效,若剛好是最後一個值就沒問題,若不是即報錯誤。

解決方式提供2種,1種是一樣使用 foreach 做刪減,但完成後即 return 跳出。另1種是改用 for 迴圈即可。

2014年3月8日 星期六

[iOS] 如何設定系統相機、相簿的語系

每次在使用 iOS 的預設拍照時,都會遇到語系是英文,即拍照畫面上的文字為英文語系。
如:取消=cancel,重新拍攝=retake 等等。

如果要支援其他語系(依使用者裝置預設的語系),設定很簡單,只要把專案的 Localizations 裡新增想要的語系即可。


另一個是在 info.plist 裡增加 Localized resources can be mixed 為 YES

2014年3月3日 星期一

[iOS] 使用 AFNetworking 遇到 "Error Domain=AFNetworkingErrorDomain Code=-1016" 處理小記

常常使用 AFNetworking 在處理與伺服端的 api 溝通,而回傳值是用 Json 格式。
最近遇到伺服端回傳 text/html 的 content-types,而 AFJSONRequestOperation 預設支援的 content-types 為 "text/json", "application/json" or "text/javascript" 這三種。

解決方法為將 text/html 加入支援的 content-types 即可

[AFJSONRequestOperation addAcceptableContentTypes:[NSSet setWithObject:@"text/html"]];

2014年1月21日 星期二

[iOS] iOS7 在提示使用者給予 app 評分&評論小記

最近許多 app 會在內部新增一個按鈕或視窗提示使用者給予 app 好的評分 or 評論,來提升 app 的排名等等。記錄一下連結在 iOS7 的改變:

itms-apps://itunes.apple.com/app/idAPP_ID?at=10l6dK

iOS 6以下可用原本的連結:
itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=APP_ID?at=10l6dK

APP_ID:可在 itunes connect 裡查看

2013年10月29日 星期二

[iOS] iOS7 使用 UIAlertView 顯示輸入框小記

在 iOS6 以前,會使用以下方法來顯示輸入框:

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Enter Password" message:@"" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
UITextField *myTextField = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 45.0, 260.0, 25.0)];
[myTextField setSecureTextEntry:YES];  //輸入內容為密碼
[alert addSubview:myTextField];
[myTextField release];


但在 iOS7 以後,addSubview 函式不支援了,要改統一使用以下方法:

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Enter Password" message:@"" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
alertView.alertViewStyle = UIAlertViewStyleSecureTextInput;  //輸入內容為密碼
UITextField *myTextField = [alertView textFieldAtIndex:0];
[alertView show];