升級到iOS5後ASIHttpRequest庫問題及解決方法
最近iOS5出來以後,我把Xcode也更新到最新版本,執行一下以前的程式,發現很多都編譯不通過,有些專案中用到ASIHttpRequest庫,網上有高手發現這個類庫在5.0的SDK下有問題,並給出了以下解決方案
原因是這樣的:
ASIAuthenticationDialog這個內建對話方塊在網路有代理的情況下出現,然後無論點cancle或是login都不能dismiss。在4.3的SDK中完全沒問題,在5.0的SDK中就會在Console中看到輸出:
Unbalanced calls to begin/end appearance transitions for <ASIAutorotatingViewController:>
很明顯示在sdk5中, 用這個庫有問題,還有在停止調式的時候,程式會有異常產生。
於是很明顯示是SDK5的變化影響了ASIHttpRequest的正常使用。於是我要fix這個問題,經過我研究發現,dismiss不起作用是由於UIViewController的parentViewController不再返回正確值了,返回的是nil,而在SDK5中被presentingViewController取代了。於是在ASIAuthenticationDialog.m中找到+(void)dismiss這個方法並修改為:
+ (void)dismiss
{
#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_4_3
UIViewController *theViewController = [sharedDialog presentingViewController];
[theViewController dismissModalViewControllerAnimated:YES];
#else
UIViewController *theViewController = [sharedDialog parentViewController];
[theViewController dismissModalViewControllerAnimated:YES];
#endif
}
還有上面那個Console的錯誤提示,解決方法是,在ASIAuthenticationDialog.m中找到-(void)show這個方法,並把最後一行程式碼
[[self presentingController] presentModalViewController:self animated:YES];
修改為:
UIViewController *theController = [self presentingController];
#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_4_3
SEL theSelector = NSSelectorFromString(@"presentModalViewController:animated:");
NSInvocation *anInvocation = [NSInvocation invocationWithMethodSignature:[[theController class] instanceMethodSignatureForSelector:theSelector]];
[anInvocation setSelector:theSelector];
[anInvocation setTarget:theController];
BOOL anim = YES;
UIViewController *val = self;
[anInvocation setArgument:&val atIndex:2];
[anInvocation setArgument:&anim atIndex:3];
[anInvocation performSelector:@selector(invoke) withObject:nil afterDelay:1];
#else
[theController presentModalViewController:self animated:YES];
#endif
這下就可以正常執行了喲, 我的問題也解決了。關於ASIHttpRequest的其它方面,到目前為止還沒發現問題。
相關文章
- Laravel5.5 升級到 5.7 問題及解決方法Laravel
- ArchLinux/Manjaro升級到6.9核心後的問題解決LinuxJAR
- LNMP架構php升級問題及解決方法 php-5.3.10升級到php-5.4.0薦LNMP架構PHP
- Rails 3 升級 Rails 4 中遇到的問題及解決方法AI
- 升級win10系統後凍結bug問題的解決方法Win10
- 升級Android Studio到1.0.2的問題解決Android
- 安裝mysql資料庫及問題解決方法MySql資料庫
- 系統升級到10.13之後cocoapods安裝失敗問題解決辦法
- 使用weiXinRecorded不支援targetSdkVersion升級23及以上問題的解決方案
- node版本升級npm命令警告原因及解決方法NPM
- MacOS升級到Monterey後python SSL握手失敗問題MacPython
- Windows 系統安裝Oracle升級到9.2.0.8 後,exp問題WindowsOracle
- 解決Ubuntu軟體包升級後無法播放flash視訊問題Ubuntu
- dedecms 後臺假死問題解決方法
- 10g升級至11g後資料庫無法啟動的問題解決資料庫
- Nacos 常見問題及解決方法
- 更新macOS Monterey後遇到的各種Bug問題及解決方法Mac
- Laravel 5.5 升級到 5.5.42 後遇到的 Cookie 序列化問題LaravelCookie
- 升級react-native至0.45.0後Redefinition of 'RCTMethodInfo'解決方法React
- 升級win10系統後不能投影的解決方法Win10
- IMP-00013 問題及解決方法
- Hadoop常見問題及解決方法Hadoop
- KMP常見問題及解決方法【Z】KMP
- Solaris 常見問題及解決方法(轉)
- 'libxml/HTMLparser.h' file not found in ASIHTTPRequest 解決方法XMLHTMLHTTP
- 【VMware vCenter】升級到 vCenter Server 8.0 U3b 後 vSphere Client 出現卡死和不響應等問題的解決方法。Serverclient
- 問卷調查中常見問題及解決方法
- ASIHTTPRequest庫HTTP
- 卡巴斯基提供升級包 解決病毒庫升級
- 升級到IE6之後在後面補上的不是com而是co.cn--解決方法 (轉)
- 升級到macOS Big Sur後,EasyConnect 無法使用解決方案Mac
- Parallels Desktop 16 升級後無法聯網的解決方法Parallel
- 升級windows10後沒有聲音怎麼回事_重灌win10後音效卡出問題的解決方法WindowsWin10
- chrome升級後audio不能播放解決Chrome
- JS中toFixed()方法的問題及解決方案JS
- 解決“華為雲伺服器Ubuntu系統升級”問題伺服器Ubuntu
- react-navigation升級3.x 問題解決方案ReactNavigation
- [轉帖]使用perf解決JDK8U小版本升級後效能下降的問題JDK