自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

iOS開發(fā)中常見bug!(內(nèi)附解答方法)

移動開發(fā)
你是否曾經(jīng)修復(fù)了一個 bug ,隨后又發(fā)現(xiàn)了一個跟剛修復(fù)bug有關(guān)的bug,又或是修復(fù)bug的方式引起了另一個bug?然而這些問題是絕佳的學(xué)習(xí)機(jī)會。所以我們怎樣盡可能多地從修復(fù)的問題中吸取經(jīng)驗(yàn)?小編用的方法就是寫下這個問題的簡單描述、修復(fù)方法以及吸取的經(jīng)驗(yàn)。

序言

你是否曾經(jīng)修復(fù)了一個 bug ,隨后又發(fā)現(xiàn)了一個跟剛修復(fù)bug有關(guān)的bug,又或是修復(fù)bug的方式引起了另一個bug?

然而這些問題是絕佳的學(xué)習(xí)機(jī)會。所以我們怎樣盡可能多地從修復(fù)的問題中吸取經(jīng)驗(yàn)?小編用的方法就是寫下這個問題的簡單描述、修復(fù)方法以及吸取的經(jīng)驗(yàn)。使用這個方法了,讓這個方法幫助自己成為一個更出色的程序員。

每當(dāng)修復(fù)一個特別棘手或有趣的問題,總會花幾分鐘寫下一些這個問題的信息。這有一些典型記錄的例子小編接下來就分享一些問題和解決方法。

1、iOS在app切換到后臺后如何繼續(xù)進(jìn)行下載?

NSURLSession已經(jīng)支持app按下home鍵之后,仍讓能夠進(jìn)行下載的任務(wù)。但是app退出之后不能進(jìn)行下載。對于NSURLSession添加如下的屬性即可進(jìn)行后臺下載。

 

  1. - (NSURLSession *)session { 
  2.     static dispatch_once_t onceToken; 
  3.     dispatch_once(&onceToken, ^{ 
  4.         NSURLSessionConfiguration *config = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.wj.demo.BackgroundSession"]; 
  5.         _queue = [NSOperationQueue new]; 
  6.         _queue.maxConcurrentOperationCount = 1;//同時支持的最多下載次數(shù) 
  7.         _session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:_queue]; 
  8.     }); 
  9.     return _session; 

但是當(dāng)用戶在按鈕home鍵的時候,這個下載還能繼續(xù)進(jìn)行。

如果用戶在后臺按鈕home鍵之后,上滑將app殺死之后,我們應(yīng)該在appdidregiestActive的方法里面先將所有的下載任務(wù)暫停。

2、IAP內(nèi)購中虛擬貨幣導(dǎo)致審核無法通過的問題?

有的時候我們需要在app中使用虛擬貨幣,在我們的app中可以使用虛擬貨幣進(jìn)行購買道具等,比如直播中的禮物,游戲中的道具等。

蘋果對于虛擬貨幣是需要提成的,提成的額度為30%。所以對于這塊的審核比較嚴(yán)格。首先你們的購買的道具在ios端和安卓端是需要分開的。如果大家玩游戲的就會發(fā)現(xiàn)游戲的數(shù)據(jù)在兩端是分開的。

用戶在安卓手機(jī)上購買的道具在iOS上是不能使用的。因?yàn)檫@樣也間接的影響了蘋果的收入。

另外就是在審核期間不能有可以兌換在appStore可購買的商品,的任意活動或者兌換碼,這個也是蘋果不允許的。因?yàn)檫@個也會影響蘋果的收入。

另外就是可能有的同學(xué)會在蘋果審核之后隱藏ipa支付,此處提醒下,蘋果會掃描你的app代碼中是否有支付寶,微信等關(guān)于支付的字段。使用開關(guān)加h5的方式可以通過審核,但是此處也有風(fēng)險,風(fēng)險就是一旦被發(fā)現(xiàn),可能的結(jié)果就是蘋果直接封掉賬號。app無法使用。

3、如何用dispatch_Group監(jiān)聽afn 下載完成

用dispatch_Group只能控制網(wǎng)絡(luò)請求的先后順序,但是要監(jiān)聽是否下載完成好像不行;但是可以用其他的方式來監(jiān)聽;例如:

可以在每個網(wǎng)絡(luò)請求的成功或失敗回調(diào)里面設(shè)置一個bool標(biāo)識符為YES,并發(fā)送一個通知,在當(dāng)前頁面監(jiān)聽通知,并在監(jiān)聽的通知方法里面,對所有網(wǎng)絡(luò)請求涉及到的bool標(biāo)識符進(jìn)行判斷,如果都為YES,就可以認(rèn)為是所有網(wǎng)絡(luò)請求都請求完成,就可以執(zhí)行自己想要進(jìn)行的操作

4、iOS原生端如何使用JSCore進(jìn)行原生和iOS的交互

在 - (void)webViewDidFinishLoad:(UIWebView *)webView 方法中

  1. [webView stringByEvaluatingJavaScriptFromString:@"editReady2();”]; 

調(diào)用此方法即可調(diào)用js中的方法。

此處有的時候可能會調(diào)用不到j(luò)s中的方法,原因有可能是js的代碼和html的代碼是分開放置的,通過此時不一定能夠拿到j(luò)s中的代碼。解決的方法是,先獲取整個html的代碼。在html代碼的后面拼接js的路徑,然后使用 webView loadHtml的方法去執(zhí)行網(wǎng)頁上的數(shù)據(jù)。

JS調(diào)用oc中的方法

在 - (void)webViewDidFinishLoad:(UIWebView *)webView 方法中

 

  1. JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext”]; 
  2. ange2  前后端約定的字符串 
  3. context[@"change2"] = ^(){        NSArray *params = [JSContext currentArguments]; 
  4. 點(diǎn)擊js端的方法,會傳遞對應(yīng)的參數(shù)給OC端,OC端根據(jù)約定的參數(shù)規(guī)則即可相應(yīng)的對應(yīng)的操作。 
  5.     NSLog(@“%@“,params); 
  6. }; 

5、用戶信息是保存在沙盒還是userdefault比較好

首先NSUserDefaults就是在沙盒中。一般用戶的屬性不會很多,所以采用 加密+偏好的方式或者是歸檔的方式可以保存。但是現(xiàn)在屬性這么多,建議使用歸檔,使用歸檔的時候,json轉(zhuǎn)model等等都有第三方輔助,很方便。

至于登錄保存用戶信息,方式很有很多種:

  • 單例模式,登陸后把用戶數(shù)據(jù)存儲在單例對象
  • NSUserDefaults .數(shù)據(jù)存儲后可以關(guān)閉app后依然存在,只有卸載App或者手動刪除,數(shù)據(jù)才會消失
  • 鑰匙串,數(shù)據(jù)可以刪除app后依然存在,鑰匙串由操作系統(tǒng)保護(hù)并且存儲后的數(shù)據(jù)是比較安全的,長用來存儲一些密碼,私鑰

6、開發(fā)中試圖通過kvo來監(jiān)聽uiwebview.scrollview contentSize來動態(tài)改變uiwebview的frame以達(dá)到uiwebview剛好填充contentSize的效果, 實(shí)際上效果會導(dǎo)致一個死循環(huán),讓scrollview.frame越來越大

scrollView 的 contentSize 和 bound 有著密切的關(guān)系,而bound 與frame有著密切的關(guān)系,因此這樣做是不合理的

解決方法

 

  1. // 在y方向給足contentsize足夠的空間 
  2. _webView.scrollView.contentSize=CGSizeMake(self.view.bounds.size.width,MAXFLOAT); 
  3. [_webView loadHTMLString:html baseURL:nil]; 
  4. // 加載完畢后再調(diào)整y方向的contentSize 
  5. - (void)webViewDidFinishLoad:(UIWebView*)webView 
  6.    //在加載完畢之后獲取webview內(nèi)容所需要的空間 
  7.    CGSizesize = [webViewsizeThatFits:CGSizeMake(self.view.bounds.size.width,MAXFLOAT)]; 
  8.    CGRectframe =CGRectMake(0,0, size.width, size.height); 
  9.     webView.frame= frame; 
  10.    //調(diào)整好frame之后再調(diào)整contentsize 
  11.     webView.scrollView.contentSize=CGSizeMake(0,0); 

7、在做代駕項(xiàng)目,用戶下單之后司機(jī)的狀態(tài)是極光推送到用戶的 如果用戶禁止app的推送功能 我應(yīng)該怎么實(shí)現(xiàn)我的實(shí)時查看司機(jī)/訂單信息的需求。

解決這個問題的方式有兩種方式:

  • app和服務(wù)器建立長連接,將數(shù)據(jù)實(shí)時傳遞app。此方式可能需要和服務(wù)器人員討論,可能對服務(wù)器的要求比較高。
  • 另一種方式是定時發(fā)送請求,類似前端使用的心跳包的方式,當(dāng)然用戶也可以在信息展示界面進(jìn)行手動刷新。此方式的好處是后臺的壓力會比較小。

8、如何實(shí)現(xiàn)在app中打開淘寶,并且跳轉(zhuǎn)到指定的應(yīng)用?比如優(yōu)惠券頁面

找到淘寶的URLScheme并且在URLScheme添加指定的參數(shù),如果你的本機(jī)安裝了淘寶app客戶端,可以跳轉(zhuǎn)到淘寶的指定頁面。

比如如下URLScheme

  1. taobao://item.taobao.com/item.hem?spm=a1z10.3-c.w4002-14141359151.28.m8vuq0$id=533219732078. 

如何找到這樣的URLSCheme。

在模擬器寫一個appDemo,和淘寶的包名一致,然后找到一個你需要的鏈接,比如優(yōu)惠卷,點(diǎn)擊跳轉(zhuǎn)的按鈕,然后在

  1. -(BOOL)application:(UIApplication *)application handleOPenURL:(NSURL *)url{} 

此方法中打印出來即可。

9、App上架后,如何修改app上顯示的公司名稱

解答方式:

  1. 先修改開發(fā)者賬號中填寫的公司名稱。
  2. 再提交更新版本。

如何修改開發(fā)者賬號中的公司名稱:

登陸到Apple developer上面,在people里面的開發(fā)者列表中找到agent,讓agent的這個人直接撥打蘋果開發(fā)部咨詢電話:400-670-1855,修改開發(fā)者賬號上的公司名或者用你注冊的賬號的郵箱直接寫郵件:“我需要更改公司名稱”到chinadev@asia.apple.com,讓蘋果開發(fā)部客服來處理。

10、iOS打包成功之后,運(yùn)行在iPhone上會閃退,黑屏?

關(guān)于打包之后無法安裝,或者安裝之后閃退的情況。只有可能是兩種情況,一種是證書錯誤,另一種就是當(dāng)前的設(shè)備并不在開發(fā)者對應(yīng)的賬號里面。

我們來看一下怎么檢測當(dāng)前的設(shè)備是否在開發(fā)者的證書里呢,如果你有開發(fā)者賬號,當(dāng)然登錄app即可獲得。但是沒有開發(fā)者賬號的情況我們該怎么辦呢?

我們以下面的ipa包為例,必須是hoc或者dev的包

 

1.png

ipa其實(shí)就是一個壓縮文件,我們可以對齊解壓。得到一個payload文件夾。

 

2.png

解壓后,點(diǎn)擊進(jìn)入文件夾,然后顯示包內(nèi)容,可以看到里面的文件列表

 

3.png

我們找到對應(yīng)的證書embedded.mobileprovision 這個就是你的ipa包里面使用的簽名證書。

然后mac上開啟終端。并cd到證書所在的路徑

并且在終端輸入

 

  1. //查看dev.hoc包中的已經(jīng)添加的設(shè)備號 
  2. security cms -D -i embedded.mobileprovision > entitlements_full.plist 

在證書對應(yīng)的路徑會生成一個文件

 

4.png

用xcode打開這個文件

 

5.png

這里面就是你的證書里面對應(yīng)的所有的設(shè)備號。

最后

我發(fā)現(xiàn)為每個有趣的 問題 記錄下來,可以讓我輕易學(xué)習(xí)到很多。在記錄的行為中我會對發(fā)生的事情思考得更深刻。同樣,一旦記錄下來,我可以在之后檢查發(fā)生的事情。偶爾,我也會瀏覽文件,只閱讀教訓(xùn)部分,對我認(rèn)為是從問題中學(xué)到的最有價值的經(jīng)驗(yàn)加強(qiáng)記憶。

今天給大家的分享就到這吧!有收獲,或者喜歡小編的可以關(guān)注小編同時也歡迎大家加入小編的iOS交流群656315826,小編會分享小編記錄的全部問題,大家一起交流成長!!

責(zé)任編輯:未麗燕 來源: 簡書
相關(guān)推薦

2010-05-12 17:04:20

BlackBerry開

2019-03-21 14:18:38

iOS開發(fā)優(yōu)化原因

2010-08-10 15:09:55

Flex開發(fā)

2010-04-06 17:26:26

Windows Pho

2022-07-07 08:01:51

Python魔法方法代碼

2018-05-13 16:00:22

主播APP視頻

2009-06-30 16:03:00

異常Java

2020-08-13 06:43:41

React前端開發(fā)

2019-04-09 21:10:23

iOS加密框架

2010-08-16 16:49:30

DIV CSS居中

2019-12-11 13:24:57

深度學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)軟件

2012-08-22 10:44:08

軟件開發(fā)

2023-06-07 16:06:03

2020-11-05 18:53:15

JavaScript開發(fā)前端

2023-12-25 08:25:42

AndroidHook應(yīng)用程序

2019-10-11 15:46:29

編程語言JavaJavaScript

2010-08-31 13:49:12

CSS

2024-08-14 17:21:34

2017-12-06 08:14:25

JavaScripBUG修復(fù)

2022-03-11 10:01:47

開發(fā)跨域技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號