專案開發中遇到的問題彙總~持續更新
專案開發快進入尾聲了,之前一直較忙,也由於沒有遇到什麼可以記載的問題,故此一直未整理,近期漸漸閒下來,會逐漸將這個專案在開發中遇到的問題彙總出來:
1. 整合藍芽(佳博印表機)要在info裡面進行如下配置
2. 程式在Xcode7.2上執行一切OK,在7.3上一跑就會報 Cannot create __weak reference in file using manual reference counting 錯誤,是因為升級到7.3以後,非ARC下使用__weak就會報錯,在非ARC模式下必須刪除所有的__weak
解決辦法:
三:支付寶支付功能公鑰處理
1. 按照流程生成公鑰私鑰後在後臺填好資料,(重要步驟)
在使用SDWebImage第三方庫是,訪問http站點的圖片不成問題,但當訪問https站點時,會遇到一個提示:
error: NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)
遇到這個提示時,首先說說怎麼解決這個問題。
在SDWebImageDownloaderOperation.m檔案中增加以下方法:
在NSURLConnection 代理方法中處理信任問題:
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
if ([challenge previousFailureCount]== 0) {
//NSURLCredential 這個類是表示身份驗證憑據不可變物件。憑證的實際型別宣告的類的建構函式來確定。
NSURLCredential* cre = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
[challenge.sender useCredential:cre forAuthenticationChallenge:challenge];
}
else{
}
}
這是NSURLConnection delegate的一個方法。
HTTPS 超文字傳輸安全協議(縮寫:HTTPS,英語:Hypertext Transfer Protocol Secure)是超文字傳輸協議和SSL/TLS的組合,HTTPS的主要思想是在不安全的網路上建立一安全通道,並可在使用適當的加密包和伺服器證書可被驗證且可被信任時,對竊聽和中間人攻擊提供合理的保護。HTTPS的信任繼承基於預先安裝在瀏覽器中的證書頒發機構(如VeriSign、Microsoft等)(意即“我信任證書頒發機構告訴我應該信任的”)。因此,一個到某網站的HTTPS連線可被信任,如果伺服器搭建自己的https 也就是說採用自認證的方式來建立https通道,這樣一般在客戶端是不被信任的,所以我們一般在瀏覽器訪問一些https站點的時候會有一個提示,問你是否繼續。
五:最近在新增活動時遇到一個bug,活動頁面的佈局因為沒用導航欄,每次從有導航欄的頁面進入時,檢視就會莫名的上移20px,
查詢原因使用一下方法,在viewWillAppear也就是檢視每次顯示時列印所有的子檢視的位置
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.view.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
obj.backgroundColor = kRandomColor;
NSLog(@"%@- %zi-idx %@-view",obj,idx,NSStringFromClass([obj class]));
}];
}
發現每次從有導航欄的頁面進入時,檢視最基本的view的frame發生了變化,高度變了
解決方法: 在viewDidLayoutSubviews裡面重置frame即可
- (void)viewDidLayoutSubviews{
self.view.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
}
6. (LXS)微信支付過程中伺服器只返回一個訂單號,需要客戶端去微信下單,下單後返回的是XML資料的字串,解析式可以先將XML字串轉換成NSXMLParser,再用XMLDictionary三方庫解析:
NSDictionary* dict = [NSDictionarydictionaryWithXMLParser:parser];
<xml><return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<appid><![CDATA[wx2958d0b2d48c010e]]></appid>
<mch_id><![CDATA[1965000002]]></mch_id>
<nonce_str><![CDATA[OjuEBoC6elB16tfW]]></nonce_str>
<sign><![CDATA[B9603C6D51C84DB5954F2799E2505244]]></sign>
<result_code><![CDATA[SUCCESS]]></result_code>
<prepay_id><![CDATA[wx20170467223011315c0430323345d19244]]></prepay_id>
<trade_type><![CDATA[APP]]></trade_type>
</xml>
7.讓UITableView的section header view不懸停的方法
當 UITableView
的 style
屬性設定為 Plain
時,這個tableview的section
header在滾動時會預設懸停在介面頂端。取消這一特性的方法有兩種:
- 將
style
設定為Grouped
。這時所有的section header都會隨著scrollview滾動了。不過grouped
和plain
的樣式有輕微區別,切換樣式後需要重新調整UI,使用grouped時,會有段尾的高度,如果不想要,可以使用代理設定段尾的高度,但是不能設為0,-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 0.01f;
} - 過載scrollview的delegate方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat sectionHeaderHeight = 40;
if (scrollView.contentOffset.y<=sectionHeaderHeight&&scrollView.contentOffset.y>=0) {
scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);
} else if (scrollView.contentOffset.y>=sectionHeaderHeight) {
scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);
}
}
8. 點選UITableViewCell中的按鈕不起作用
在訂單管理介面中UITableViewCell是由UIView改過來的,xib還是UIView建立的,沒有contentView,但是UITableViewCell建立的xib應該是有一個contentView的,直接修改時xib中還是沒有contentView,在創建出來以後,系統會預設將contentView加上,經過多次測試,發現系統新增的contentView會覆蓋在檢視最上層,導致UITableViewCell上所有控制元件的點選事件均失效,在程式碼中加入
[self insertSubview:self.contentView atIndex:0];可解決,或重寫xib亦可。
9. cocoaPods重灌失敗,報錯RPC failed; curl 56 SSLRead() return error -36問題,因為本人電腦上有三個版本的Xcode,導致路徑不明,更新出現問題,可以使用一下命令列指定路徑進行更新,
sudo xcode-select -switch /Applications/Xcode 8.2.1.app/Contents/Developer
也可以刪除過多的Xcode,只保留一個,名字改為Xcode再更新即可10. could not insert new outlet connection
xib/storyboard連線屬性時偶爾會報這個錯誤,可以嘗試在要連線屬性的地方加入一個換行試試
11.使用git管理程式碼時,會出現部分路徑拷貝的情況,導致同一個工程有多個路徑
解決辦法,刪除除Podfile之外的pod相關檔案,重新pod install一次即可
12.在用Swift開發專案時,引入了三方庫R.swift,在pod install後偶爾會報以下錯誤
提示找不到R.swift/rswift檔案,加上即可,R.swift所在目錄下的正確檔案截圖如下
13. UIButton實現title有兩行文字
如果兩行文字大小相同,顏色相同,可以直接設定Line Break為Word Wrap,然後在Title中按option+enter就可以增加行數。
要想兩行文字大小不同,顏色不同,那加一個UILabel作為UIButton的subview了應該是最方便的實現方式了。
14.IB_DESIGNABLE 和 IBInspectable 的兩個比較厲害的屬性;
IB_DESIGNABLE
讓你的自定 UIView 可以在 IB 中預覽。IBInspectable
讓你的自定義 UIView 的屬性出現在 IB 中 Attributes inspector 。
15. exc_bad_access(code=1,address=0x0)問題
原因:訪問了已經釋放的物件導致
出處:宣告引數時一時疏忽,把資料NSArray的用assign引用了,改為strong即可
16. message sent to deallocated instance 0x10b46e7d0
在WLYX開發的過程中,有個加入購物車的動畫,有次出現報錯message sent to deallocated instance 0x10b46e7d0,隨後會閃退,意思是說呼叫了已釋放物件不存在的方法,細查之下發現是因為A,B兩個頁面同時實現了動畫協議,但是在從A頁面跳轉到B頁面時,B頁面也遵守了協議,但是在頁面銷燬的時候沒有取消,解決辦法:需要遵守協議的地方儘量寫在頁面出現的地方(viewDidAppear),在頁面消失的時候進行銷燬(viewWillDisappear)。