標籤:
項??目中遇到的問題
*代碼規範問題 *項??目開始前讓學?生?首先抓接?口寫接?口?文檔畫
流程圖
1、IOS UTF-8編碼(POST上傳的時候,漢字上傳的格式為%AE 這種形式),可以通過下?面?方法進?行轉換。
1、NSString* encodedString = [urlStringstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
2、
NSString * encodedString = (NSString*)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)urlString,NULL,NULL,kCFStringEncodingUTF8);2、鍵盤上?面View在改變鍵盤類型的時候,View的frame值即時改變,可以使?用通知中?心來進?行觀察,即時的改變View的frame。[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(keyboardWillChangeFrame:)name:UIKeyboardWillChangeFrameNotification object:nil];也可以設定鍵盤的inputView。3、在解析??網路返回資料的時候,接收資料類型不匹配,?比如:?比如說返回的是NSNumber,接收?用NSString。4、數組越界的問題(常?見情況是:先進?行??網路請求的語句,但是在下?面語句緊接著就使?用了接收??網路資料的NSArray或者是NSMutableArray),對?一個元素個數為0的數組進?行objectAtIndex:操作,導致數組越界,解決?方法是在從數組中取元素的時候,對數組進?行[array count]判斷;保證數組中元素個數不為0,然後再對數組進?行操作。5、??網路返回資料為<null>時,不知道如何進?行判斷,出現這種情況的原因就是,後端返回的資料沒有給預設值,可以通過[responseData isEqual:[NSNull null]]進?行判斷。?6、學?生從??網上下載的demo,在參照demo?自?己寫的時候,莫名其妙的出現崩潰的情況,?一般情況下都是,??網上的Demo使?用的時ARC,但是學?生在?自?己?工程?裡?面使?用的時MRC,導致某些對象提前釋放。解決?方法,在TARGETS-Build Phases-Compile
Sources 對應的.m?檔案添加-fobjc-arc。如果想讓某個類不使?用ARC那麼可以在TARGETS-Build Phases-Compile Sources 對應的.m?檔案添加-fno-objc-arc。7、在IOS7中UINavigationController中使?用UITextView或者UIScrollView的時候,?文本的對?齊?方式,垂直?方向的對?齊?方式是置中對?齊,不是上對?齊,需要在viewDidlLoad?裡?面添加:automaticallyAdjustsScrollViewInsets
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0){
}
在使?用UIScrollView的時候也會出現位移。 8、在使?用UICollectionView的時候,崩潰出 現‘UICollectionView must be initialized with a non-nil layout parameter’,原因是沒有進?行 UICollectionViewFlowLayout的初始化。
解決?方法:
UICollectionViewFlowLayout *layout= [[UICollectionViewFlowLayout alloc]init]; self.collectionView = [[UICollectionView alloc]initWithFrame:self.view.bounds collectionViewLayout:layout];
[self.view addSubView:self.collectionView]; [self.collectionView registerClass:[UICollectionViewCell class]
forCellWithReuseIdentifier:@"Cell"]; self.collectionView.delegate=self; self.collectionView.dataSource=self;
注意出現:delegate,dataSource協議的時候 self.collectionView.delegate=self; self.collectionView.dataSource=self; 對應的在.h?裡?面?一定要加: <UICollectionViewDataSource,UICollectionViewDelegateFlowL ayout> 9、在導?入CocoaHTTPServer架構的時候,在已經導?入libxml2的 情況下,設定了header search path為${SDCROOT}/usr/include/
self.automaticallyAdjustsScrollViewInsets = NO; // Avoid
the top UITextView space, iOS7 (~bug?)
libxml2,仍出現unknown type name ‘xmlNodePtr’等20個錯 誤,原因是libxml2在其他?檔案夾?裡?面(?比如在cocos2d-x的?檔案 夾?裡?面),另外導?入libxml2類似架構的時候是在TARGETS-Build Phases-Link Binary With Libraries,?而不是在*Tests下。 10、在?一個試圖模態除?一個試圖的時候,出現Presenting view controllers on detached view controllers is discouraged <*>, 解決?方法:
11、程式運?行的過程中出現’Only run on the main thread!’,是 因為更新UI不是在主線程進?行的。 12、UITableViewCell的在IOS5和IOS6有不同的初始化?方法,在 IOS6中采?用- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath對 UITableViewCell進?行初始化時,需要使?用配套的- (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier?方法對 UITableViewCell進?行註冊。 13、在使?用百度地圖API的時候,先需要在appDelegate?裡?面設 置百度地圖的代理,不然進?入主畫面之後是?黑?色的。 14、在使?用UITableView的時候,section會停留在螢幕的最上 ?方,直到滑動到下?一個分區,解決?方法,tableView的樣式選?用 group,然後?自訂headerView。 15、涉及到??網路請求和UITableView結合展?示資料的時候,出現 數組越界問題,原因是:??網路請求還沒有完成,但是在 UITableView的代理?方法?裡?面已經開始使?用數組(對?一個元素個 數為0的數組調?用objectAtIndex:?方法),解決?方法是在使?用數組 的時候判斷數組中元素個數,不為0才進?行操作。 16、在使?用第三?方抽屜效果(DDMenu)的過程中,如果從 Center試圖Push到下級ViewCOntroller(AViewController),那麼 在AViewController中使?用?手勢仍可以返回DDMenu的左視圖,如 果想取消這個效果,那麼可以在AViewController中把DDMenu的 ?手勢暫時關閉。 17、如果對?一個數組使?用系統的copy,那麼copy得到的數組是 個不可變的數組。
[self.view.window.rootViewController
presentViewController:viewController animated:YES
completion:nil];
18、在類的.h?裡?面,如果在#import <Foundation/Foundation.h> 的下?一?行寫代碼的話,不會?自動補全,還有如果參數?裡?面有中?文 的話,Xcode不提?示也不會?自動補全,但是可以使?用。如: _showBookLabel1.text = [NSString stringWithFormat:@"作者: %@ 類型:”,_assigenModel.author_name];author_name不提 ?示,但是能使?用。 19、在使?用本地通知的時候,如果註冊過通知,但是把程式刪除 之後,再次安裝的時候,會出現兩次通知提醒(因為這些通知加 ?入到系統?裡?面)。解決?方案是在進?入程式時把之前的通知刪除掉。 20、在UITableViewCell中動態展?示資料的時候,可以在?自訂 Cell?裡?面寫?一個類?方法來專?門計算Cell的?高度。 21、在使?用第三?方基於FlipSquaresNavigationController做動畫 的時候(push),在做動畫的過程中會出現動畫卡的現象,原因 是在FlipSquaresNavigationController做動畫的?方法?裡?面,調?用 了下個界?面的.view屬性,這個時候會執?行viewDidLoad?方法,如 果在viewDidLoad?裡?面建立UI的話,會佔?用主線程,照成動畫的 卡頓,解決?方法可以在viewWillAppear:或者是viewDidAppear:?裡 ?面建立UI . 22、深拷?貝和淺拷?貝的最?大區別是copy出來的成員對象地址是否 ?一致,如果?子物件地址改變,則是深拷?貝,反之,則是淺拷?貝。 23、 UITableView 定位到某個分區或者某?一?行
NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:0 inSection:3];
[_tableView scrollToRowAtIndexPath:scrollIndexPath
atScrollPosition:UITableViewScrollPositionTop
animated:YES];24、學?生在做視頻播放和下載的時候出現這個錯誤RTCReporting: resolve from https://qtpartners.apple.com/storebags/hls?version=4.10,解決?方案(換台機器或者換個Xcode就可以)
。??網上找的相似的錯誤給出的解決?方案是:1、This seems tobe a problem with trying to play videos on the simulator. I‘vehad this problem for months now, and just ran into it again
today when I was trying to play video on my simulator.
The solution, while not great, is to use an actual device instead of thesimulator for testing video playing.
2、You need use:[player play];
after you sound play in the real device and in simulator.25、IOS7狀態列的適配問題http://beyondvincent.com/blog/2013/11/03/120-
customize-navigation-status-bar-ios-7/
26、完整的單例模式,需要重寫retain、release、autorelease、retainCount等?方法.相關介紹http://beyondvincent.com/blog/2013/05/09/20/,https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html
27、在使?用
28、從別?人那邊拷?貝過來的?工程,只有My mac 64-bit可選,模擬器都不能使?用,解決?方法:?首先關閉你的Xcode,找到你出現解決此問題的項??目??目錄下,然後此項??目的***.xcodeproj ?檔案,然後右鍵選擇“顯?示包內容”,如:
!
?一般情況下,包中有如下3個?檔案:
1.project.pbxproj 2.project.xcworkspace 3.xcuserdata
找到“xcuserdata”這個罪魁禍?首,將其整個移到廢紙簍中,OK,重新開啟你的項??目,
則正常顯?示可使?用的Simulator;(http://www.himigame.com/iphone-cocos2d/
621.html)
29、學?生在聲明執行個體變數的時候使?用了NSString *_string;這樣在使?用的過程中取到的
是?一個地址,因為這個NSString *_string;在CAValueFunction衝突。如果命名沒問
題,也有可能的原因是這個對象被提前釋放了,retain?一下也許就可以了。
30、得到當前?工程的??目錄”$(SRCROOT)”
31、ShareSDK真機出現Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_WeiboApi", referenced from: objc-class-ref in
MMAppDelegate.o,解決?方法http://blog.csdn.net/topbar/article/details/
21449643<iOS7.1 編譯報錯 解決?方案 體會>
32、如果建立的?工程,運?行時發現self.view的?高度只有480,那麼原因就是缺少了4
英?寸的啟動圖?片[email protected]
33、百度地圖錯誤[__NSCFString stringFromMD5]: unrecognized selector sent to
instance 0x1f836730
project->build setting->other linker flags
寫上 -ObjC
百度地圖常?見錯誤:
(1)編譯正常,運?行報 [UIDevice uniqueGlobalDeviceIdentifier]:
unrecognized selector sent to此時需要 other linker flags 添加 -all_load參數。
具體:Project ->build settings ->linking->Other Linker flags(2)編譯報 Undefined symbols for architecture armv7。請檢查有沒有添加QuartzCore.framework 和 CoreLocation.framework
(3) BMKMapManager強烈建議通過單例模式管理起來,並且不要?手動調?用其release?方法。
(4) 進?行?使用者位置定位時除了要設定showsUserLocation = YES,還要在mapView:didUpdateUserLocation:?方法中調?用setCenterCoordinate:animated
另外?一定要在dealloc中,或者其他離開?頁?面的地?方調?用showsUserLocation= NO,否則會出現第?二次push到定位?頁?面時,不會重新置放問題。
(5) 必須?至少讓?一個類保持.mm?檔案,或者按照官?方修改編譯器類型。(6) lipo –create Release-iphoneos/libbaidumapapi.a Release-
iphonesimulator/libbaidumapapi.a –output libbaidumapapi.a 如果報錯,請改成
lipo –create –output libbaidumapapi.a Release-iphoneos/libbaidumapapi.a Release-iphonesimulator/libbaidumapapi.a 就能解決。34、提醒學?生在往?工程?裡?面拖?檔案的時候?一定要選擇copy和addToTargets.35、某些控制項的可互動性userInteractionEnabled<這種問題我感覺可以不予解決,只要前期講師多次強調過的話>。
36、note: after modifying system headers, please delete the modulecache at ‘/Users/sumomochuufuku/Library/Developer/Xcode/DerivedData/ModuleCache/2NEVAP7X943D2’。。解決辦法:前往 ‘/Users/sumomochuufuku/Library/Developer/Xcode/DerivedData/ModuleCache/2NEVAP7X943D2 這個?檔案夾,刪除其?檔案夾中的內容,然後運?行app,沒問題了,注意不是刪除 2NEVAP7X943D2 ?檔案夾,?而是其中的內容。然後再 clean下項??目就可以了(product -> clean)<IOS7開發錯誤收集http://blog.csdn.net/smallsky_keke/article/details/16117653>
37、如果你的應?用程式是從別?人那邊拷?貝過來的,如果提?示第三?方開源架構使?用錯誤或者找不到,那麼把第三?方開源架構重新導?入?一遍有時就可以了38、運?行xcode在真機上,或者archive打包時,都會彈出輸?入?使用者名稱和密碼的框:”Mac OS X"想要進?行更改。鍵?入管理員的名稱和密碼以允許執?行此操作("Mac
OS X”想使?用系統鑰匙串),解決?方法如下<http://blog.csdn.net/rhljiayou/article/details/13296811>39、Xcode5去除?高光效果:http://blog.csdn.net/qtc_2012/article/details/18087745
1.?首先,在General中App Icons 使?用Source--> AppIcon2.在 Images.xcassets 中依次添加對應尺?寸的icon.3.選中AppIcon ,在右側第三個按鈕下,勾選 iOS icon is pre-rendered.
4.編譯,運?行,icon 的?高光效果就沒有了.PS:如果,還存在的話,請將app先卸載,然後重新運?行即可.
40、如果使?用mailcore2第三?方開源架構,那麼需要聯??網下載東?西,如果??網路不通暢的話會報錯。
41、XCode 5 “ios模擬器未能安裝此應?用程式”解決辦法:http://blog.csdn.net/somestill/article/details/1940204942、在IOS中使?用系統JSON解析的的時候,發現返回資料是JSON格式,但是解析出來是個null,可能是返回資料的編碼格式問題,可以嘗試使?用ASI的responseString,然後把responseString轉換成NSData,在使?用系統的JSON解析就可以了。43、百度地圖和ShareSDK?一起使?用的時候,最後報錯duplicate symbol_isRetina in,解決?方案把all_load取消掉。44、如果學?生在使?用第三?方靜態庫如ShareSDK的時候出現錯誤Undefinedsymbols for architecture arm64:或者是X86-64,當前的靜態庫不?支援64
位,需要在Build Settings下?面,刪除Valid Architectures 下的arm64,並且改Build Active Architecture Only改為NO.
45、如果在使?用真機拍照,圖?片儲存到本地Document?檔案,再次取出圖?片的時候出現圖?片旋轉了90°可以使?用以下?方法解決:
CGImageRef oldImageRef=image.CGImage;
UIImage* newImage=[UIImage imageWithCGImage:oldImageRef scale:.1orientation:UIImageOrientationRight];
參考連結:http://www.2cto.com/kf/201404/290777.html46、如果想在iOS中設定狀態列是?白?色,那麼需要[[UIApplicationsharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];另外在plist?檔案?裡將View controller-based status bar appearance改為NO
47、在播放?音樂的時候,如何設定都沒有問題,但是沒有聲?音,這個時候需要考慮播放器是否設定為局部變數了。48、如果UITableViewCell,didSelect?方法不?走,其他代理?方法都?走,那麼是有?手勢截獲了UITabelViewCell的didSelect事件49、Xcode中擷取?工程的相對路徑:$(SRCROOT)50、在使?用CoreData的時候出現Receiver type‘NSManagedObjectContext‘ for instance message is a forwarddeclaration 等9個(不確定,或者是7個)錯誤,是因為雖然導?入了CoreData架構,但是沒有在.pch?檔案?裡?面#import,參考連結:http://blog.csdn.net/xiaoxuan415315/article/details/794086151、如果程式在運?行的時候崩潰,出現的提?示的某個類調了setValue:forUndefinedKey:,並且這個key在這個類?裡?面或者整個?工程?裡?面都不能搜尋到,那麼這個時候就要考慮使?用Storyboard的時候,?一個控制項拉了兩根線的情況。52、在使?用shareSDK進?行QQ空間分享的時候,出現提?示could not buildmodule uikit,把模擬器換成真機調試53、同時使?用百度地圖SDK和百度導航SDK的時候出現以下10個錯誤的解決?方案是在build settings中的other linker flags添加-Objc
錯誤如下:ld: warning: directory not found for option ‘-L/Users/lanou3g/Documents/Daemonson/NavigationGo/baiduNaviSDK/Statistic‘
Undefined symbols for architecture i386:
"_MSR_Close", referenced from:
CVMFE::mfeClose() in libbaiduNaviSDK.a(VMFE.o)
"_MSR_Detect", referenced from:CVMFE::mfeDetect() in libbaiduNaviSDK.a(VMFE.o)
"_MSR_Exit", referenced from:
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to seeinvocation)
54、Xcode每次修改後,編譯提?示“Developer tools access”,需要控制另?一個進程才能繼續調試,可以使?用如下終端命令解決。sudo /usr/sbin/DevToolsSecurity —enable。參考串連:http://blog.csdn.net/xyxjn/article/details/1611177354、上傳程式的時候出現Missing Screenshot”,可能原因是建立工程的時候選擇的是混合工程,但是沒有iPad的 55、優酷m3u8地址格式,1、http://v.youku.com/player/getM3U8/vid/XNzI3NTI1NjUy/type/flv 2、http://pl.youku.com/playlist/m3u8?vid=XNzIwMDE5NzI4&type=mp4
http://pl.youku.com/playlist/m3u8?
vid=162779600&ts=1407469897&ctype=12&token=3357&keyframe=1&sid=640746989782612d6cc70&ev=1&type=flv&ep=dCaUHU2LX8YJ4ivdjj8bMyqxJ3APXP8M9BiCiNRiANQnS%2B24&oip=2043219268 56、子線程中不要進行UI的更新,並且如果子線程有自動釋放對象,那麼需要手動添加自動釋放池。 57、No architectures to compile for (ARCHS=armv7 armv7s arm64, VALID_ARCHS=armv7s,armv7).出現這個錯誤的時候,是因為Valid Architectures設定的格式和Architectures的格式不一樣。比如Architectures是空格,Valid Architectures中間是”,”(逗號)。 58、Core Data:Receiver type ‘NSManagedObjectContext’ for class is a forward declaration。解決方案:在使用core Data時出現如題 錯誤,已在項目中加入了Coredata.framework,最終在stackoverflow上找到答案,原來要在 xxx.pch 中加入#import <CoreData/CoreData.h>
59、學生在抓取時光網的借口的時候,抓介面能抓到資料,但是在進行請求的
時候沒有資料,那是因為少了header,
代碼如下: NSURL *url = [NSURL URLWithString:@"http://api.m.mtime.cn/Showtime/LocationMovies.api?locationId=290"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:-1];
[request setHTTPMethod:@"GET"];
[request addValue:@"5,1406738416605,B99DAADA90F36E724EA7A12214774062" forHTTPHeaderField:@“X-MTime-Mobile-CheckValue"]; [request setValue:@"text/html" forHTTPHeaderField:@“Content-Type"];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"--- str = %@", string);
}];
60、遇到網路介面返回資料亂碼:?
可以使用
NSStringEncoding gbkEncoding =CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); NSString *string = [[NSString alloc] initWithData:self.data encoding:gbkEncoding]; 61、遇到錯誤,ld: building for iOS Simulator, but linking against dylib built for MacOSX file ‘/Applications/Xcode.app/Contents/Developer/
Library/Frameworks/XCTest.framework/XCTest‘ for architecture x86_64
clang: error: linker command failed with exit code 1 (use-v to see invocation)1把下?面的XCTest.framework刪掉,
2然後把測試?工程.m?檔案右邊的target勾選掉,保留測試(如)。?
62、iOS ?自訂字型http://blog.csdn.net/justinjing0612/article/details/8093985?63、如果在抓接?口的過程中,能抓到資料,但是使?用代碼的話不能請求到資料,那麼可能的原因就是缺少了HttpHeader,?樣本:
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@“http://api.m.mtime.cn/ Showtime/LocationMovies.api?locationId=290”] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:-1];
[request addValue:@"5,1406738416605,B99DAADA90F36E724EA7A12214774062" forHTTPHeaderField:@“X-MTime-Mobile-CheckValue"]; // 添加 HttpHeader
[request setHTTPMethod:@"GET"];
[NSURLConnection sendAsynchronousRequest:request queue: [NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSLog(@"---- request = %@", response); NSLog(@"=== =%@", connectionError); NSLog(@"data%@", data); NSString *str = [NSJSONSerialization
JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"--- str = %@", string);
}];
?
forState:UIControlStateNormal]; 選中item字型顏?色:[[UITabBarItem appearance]
setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor
yellowColor] }forState:UIControlStateSelected];?64、如果在使?用CocoaPods的過程中,出現頭?檔案找不到的情況,那麼需要在下?面的位置進?行配置。
63、tabBarItem的未選中title顏?色:[[UITabBarItem appearance]setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor whiteColor] }
65、相容iOS8升級到Xcode6.0編譯之前的?工程,結果App?無法在真機上運?行。報錯如下:The file “xxxx.app” couldn’t be openedbecause you don’t have permission to view it.
解決?方案:查看?工程中警告,發現需要更新舊?工程的設定:點擊Upate to reconmmented settings,開啟如下窗?口:
66、如果你在程式運?行的時候出現這個錯誤:
出現這個錯誤的原因是因為你導?入了”LO_ViewConrller.m”?檔案,或者是你的?工程?裡?面有兩個LO_ViewConrller的.h和.m?檔案。
67、iOS objc_msgSend iOS too many arguments in function
call 報錯解決?方案
?
IOS 項目問題總結