這篇文章主要分享一下最近項(xiàng)目中遇到的問題和實(shí)際的解決方案的分享,還有一款小插件的分享,希望對遇到同類問題的作者有所幫助。
問題一
- 使用
WebView加載網(wǎng)頁時(shí)候進(jìn)行加載時(shí)候,如果出現(xiàn)網(wǎng)絡(luò)請求緩慢,并且使用MBProgressHub進(jìn)行動畫處理,會出現(xiàn)以下情形: - 情形一:使用
[MBProgressHub showMessage:""]
使用這個(gè)方法你會出現(xiàn)這個(gè)情況
整個(gè)屏幕被覆蓋
這樣的話用戶無法操作,只能殺死程序重新開啟程序,用戶體驗(yàn)極差
- 情形二:使用
[MBProgressHub showMessage:@"" toView:self.view]
只覆蓋導(dǎo)航欄以下的屏幕
這樣體驗(yàn)較情形一較好,用戶可以使用返回鍵返回,體驗(yàn)一般般。
針對這個(gè)問題首先想到的是WebView有沒有個(gè)屬性可以提供我設(shè)置超時(shí)請求,找了一遍沒有,那么WebView load 是一個(gè)request,那么肯定有設(shè)置請求超時(shí)的操作,果然發(fā)現(xiàn)以下方法
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:_webViewUrl] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:5.0];
在webView的代理方法中
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
NSLog(@"%@",error.userInfo);
[MBProgressHUD hideHudWithMessageError:error.userInfo[@"NSLocalizedDescription"]];
[MBProgressHUD hideHUDForView:_webView];
}
這樣的就處理webView中的超時(shí)請求

問題二
- 定時(shí)器
NSTimer使用出現(xiàn)的問題:在做獲取驗(yàn)證碼操作時(shí)候倒計(jì)時(shí)出現(xiàn)負(fù)數(shù),原因未能正確處理定時(shí)器造成。
-(void)setUpTimer
{
self.timeLable.text = @"59s";
self.sendBtn.hidden = YES;
self.timeLable.hidden = NO;
self.timeIndex = 59;
//設(shè)置定時(shí)器
self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(elapsedTimer) userInfo:nil repeats:YES];
//這句代碼非常重要,否則會造成未知的錯(cuò)誤
[[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode];
}
//執(zhí)行倒數(shù)器
-(void)elapsedTimer
{
self.timeIndex = self.timeIndex - 1;
if (self.timeIndex < 0) {
self.timeLable.hidden = YES;
self.sendBtn.hidden = NO;
[self timerEndRunning];
}else
{
self.timeLable.text =[NSString stringWithFormat:@"%ds",self.timeIndex];
}
}
// 結(jié)束倒數(shù)器
- (void)timerEndRunning
{
if (self.timer != nil) {
[self.timer invalidate];
self.timer = nil;
}
}
在處理發(fā)送驗(yàn)證碼按鈕發(fā)送后顯示暗色有兩種方法,第一種將按鈕設(shè)置為不能點(diǎn)擊然后將按鈕的背景色設(shè)置為灰色,第二種是創(chuàng)建按鈕的時(shí)候設(shè)置圖片的UIControlStateDisabled下的圖片,以上兩種的都可以。
你以為上面定時(shí)器就處理完成了嗎?當(dāng)你銷毀界面的時(shí)候,你會發(fā)現(xiàn)delloc并未調(diào)用,實(shí)際上當(dāng)控制器出棧的時(shí)候,并未銷毀,什么原因呢,原因是你在發(fā)送驗(yàn)證碼倒計(jì)時(shí)過程的定時(shí)器并未銷毀和停止!?。?br>
所以正確的邏輯應(yīng)該是:
- (void)viewDidDisappear
{
if(self.timer != nil)
[self.timer invalid];
self.timer = nil;
}
記得一定先invalid再nil,否則你會后悔的。
最后給大家分享一個(gè)模擬低網(wǎng)速的插件,其實(shí)蘋果官方已經(jīng)給我們提供了這樣的插件,我們?nèi)ヌO果官網(wǎng)下載就可以了
具體地址見下圖:

這個(gè)地址是需要賬號登錄的,沒有的伙伴申請一個(gè)即可。

個(gè)人點(diǎn)擊下載最新的Xcode 7.3告訴我沒有權(quán)限,所以我就下載了7.1,前提說明我的Xcode是7.3,安裝后正常使用。

點(diǎn)開后

這樣就可以在模擬器上模擬相應(yīng)的網(wǎng)絡(luò)狀態(tài)了。
問題三 (補(bǔ)充)
更新于2016.6.21日
我們會遇到這種問題:

這種是使用[UIImage imageName:]這個(gè)方法未找到對應(yīng)的圖片引起的,如果是一個(gè)新的項(xiàng)目是不會出現(xiàn)這個(gè)問題的,因?yàn)槟愕膱D片你都是確定的,當(dāng)我們要套用舊的項(xiàng)目開始一個(gè)新的項(xiàng)目的時(shí)候最容易出現(xiàn),但是我們不可能一一去找到底在哪里,給大家分享一個(gè)簡易的方法。

增加一個(gè)方法的斷點(diǎn),運(yùn)行項(xiàng)目查找,更改后重新運(yùn)行,問題就會消失。
- 千萬別打賞我,我害羞。。。。

