IOS 项目问题总结

项??目中遇到的问题

*代码规范问题 *项??目开始前让学?生?首先抓接?口写接?口?文档画

流程图

1、IOS UTF-8编码(POST上传的时候,汉字上传的格式为%AE 这种形式),可以通过下?面?方法进?行转换。
1、NSString* encodedString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringE ncoding];

2、

NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorD efault, (CFStringRef)urlString,NULL,NULL,kCFStringEncodingUTF8); 2、键盘上?面View在改变键盘类型的时候,View的frame值实时 改变,可以使?用通知中?心来进?行观察,实时的改变View的 frame。[[NSNotificationCenter defaultCenter] addObserver:self selector:@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 to be a problem with trying to play videos on the simulator. I‘ve had 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 the simulator 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 module cache 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--> AppIcon 2.在 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/19402049 42、在IOS中使?用系统JSON解析的的时候,发现返回数据是JSON格式,但 是解析出来是个null,可能是返回数据的编码格式问题,可以尝试使?用ASI的 responseString,然后把responseString转换成NSData,在使?用系统的 JSON解析就可以了。 43、百度地图和ShareSDK?一起使?用的时候,最后报错duplicate symbol _isRetina in,解决?方案把all_load取消掉。 44、如果学?生在使?用第三?方静态库如ShareSDK的时候出现错误Undefined symbols 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:.1 orientation:UIImageOrientationRight];

参考链接:http://www.2cto.com/kf/201404/290777.html 46、如果想在iOS中设置状态栏是?白?色,那么需要[[UIApplication sharedApplication] 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 forward declaration 等9个(不确定,或者是7个)错误,是因为虽然导?入了 CoreData框架,但是没有在.pch?文件?里?面#import,参考链接:http:// blog.csdn.net/xiaoxuan415315/article/details/7940861 51、如果程序在运?行的时候崩溃,出现的提?示的某个类调了 setValue:forUndefinedKey:,并且这个key在这个类?里?面或者整个?工程?里?面 都不能搜索到,那么这个时候就要考虑使?用Storyboard的时候,?一个控件拉 了两根线的情况。 52、在使?用shareSDK进?行QQ空间分享的时候,出现提?示could not build module 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 see invocation)
54、Xcode每次修改后,编译提?示“Developer tools access”,需要控制另 ?一个进程才能继续调试,可以使?用如下终端命令解决。sudo /usr/sbin/ DevToolsSecurity —enable。参考连接:http://blog.csdn.net/xyxjn/ article/details/16111773 54、上传程序的时候出现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=dCaUHU2LX8YJ 4ivdjj8bMyqxJ3APXP8M9BiCiNRiANQnS%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:@{ NSForegroundColorAttributeNam e : [UIColor whiteColor] }

技术分享

65、兼容iOS8升级到Xcode6.0编译之前的?工程,结果App?无法在真机上运 ?行。报错如下:The file “xxxx.app” couldn’t be opened because 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 报错解决?方案

技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。