把自己项目中遇到的问题总结一下,供大家参考,希望大家多多提出意见!!
转载:原文地址 :http://www.cnblogs.com/iOS-mt/p/4268504.html
在Xcode 6.2中遇到Your build settings specify a provisioning profile with the UUID, no provisioning profile was found错误
1.找到项目中的**.xcodeproj文件,点击右键,或者直接点击项目名称,右键 show in finder (打开包内容)。
2.打开后找到project.pbxproj文件,用文本编辑器打开。其实就是右键,点击open就好了。
3.打开这个文件后,按command+F,在这个文件中查找“PROVISIONING_PROFILE”,找到和这个“
PROVISIONING_PROFILE = “487F3EAC-05FB-4A2A-9EA0-31F1F35760EB”;
“PROVISIONING_PROFILE[sdk=iphoneos*]” = “487F3EAC-05FB-4A2A-9EA0-31F1F35760EB”;”类似的都删除。
4.然后保存文件,重新打开项目。xcode会提示你重新下载安装provisioning profile文件。下载后安装上就可以。
// 让scrollView适应界面的高度,不会在界面中来回摇晃
self.automaticallyAdjustsScrollViewInsets = NO;
在每个页面的入口和出口(一般是viewDidLoad和dealloc)打上日志,可以了解用户的操作流程,并查出页面在关闭时是否销毁了相应的对象。
定时器NSTimer 需要在一个新线程中运行,否则UI操作会阻塞定时器。
需要为定时器所在的线程设置NSRunLoop,否则定时器可能不会动。
如果在线程中设置了NSRunLoop,需要在销毁线程时也将其停止,使用CFRunLoopStop 。
所有的UI操作都应该在主线程中执行,否则会导致应用崩溃(不一定是立即崩溃)。
如果项目中有c函数,出现同名的函数会导致应用编译失败,即使这些c函数处于不同的页面中。
使用ASIHttpRequest,同步下载过程是不能被取消的,异步下载过程才可以被取消。
应用内支付,支付成功的回调里面,还需要对加密数据transactionReceipt 进行验证,避免越狱的机器使用 IAPFree 等软件伪造数据。
不要试图获取设备的UDID,否则会造成应用审核不通过。可以使用OpenUDID 或者 Mac 地址代替。
10.将比较费时的操作不要放在主线程中执行,避免UI响应慢。应该在一个新线程中执行(对有同步要求的操作除外)。
11.使用最新的Xcode and iOS SDK进行开发,对高版本的兼容性会好一些。例如Mac 10.6下只能安装Xcode4.2and iOS SDK 5.0 ,对iOS 5.1版本的系统就不能直接调试。
图片命名:例如有一张图片为 MyImage.png,为了兼容不同设备,需要存为不同分辨率的图片,命名规则如下:
MyImage.png - 默认的图片名称。
MyImage@2x.png - 适用于Retina 显示屏的高分辨率图片。
MyImage~iphone.png - 适用于iPhone 和 iPod touch的图片。
MyImage@2x~iphone.png - 适用于iPhone and iPod touch 设备 Retina 显示屏的高分辨率图片。
在显示图片时,只需要直接取 @”MyImage.png”,系统就能根据当前的设备,自动读取相应的图片了。
注意:以上图片命名规则只使用于UIKit框架。如果使用了cocos2d等其他框架,则有另外一套命名规则。
一些好用的框架/组件:
PDColoredProgressView进度条组件,可以设置进度条的颜色,支持iOS4。但是在ASIHttpRequest的下载进度条中不好使用。
MTLabel可以对label中的文字设置行高。
TSAlertView可以在弹出框(UIAlertView)中设置输入框,类似于JavaScript中的prompt 。
ZipArchive对文件进行压缩和解压操作。
ASIHTTPRequest数据的上传和下载,以及断点续传。
json-framework文件格式解析。
性能优化使用xcode自带的 Instruments工具可以查看应用的内存,cpu等资源使用情况。
JSON格式解析速度优化。有人分析说 JSONKit 比 json-framework 效率更高。
日志跟踪友盟,比较全面的数据分析工具。
Crashlytics.framework可以记录应用程序崩溃日志,并快速定位到出问题的代码行。国内可能需要FQ。
ios 项目问题解决总结(2)
1.最近学习coreImage,coregraphics,了解相关的画笔相关的问题,关于混合模式的设计,画布上undo,redo的操作实现?(2014 7.15)
一:混合模式
(1) // 将UIImage转换成CIImage
CIImage *ciImage1 = [[CIImage alloc] initWithImage:self.imageView1.image];
CIImage *ciImage2 = [[CIImage alloc] initWithImage:self.imageView2.image];
// 创建滤镜
CIFilter *filter = [CIFilter filterWithName:@"CIMultiplyBlendMode"
keysAndValues:kCIInputImageKey, ciImage1 ,kCIInputBackgroundImageKey,ciImage2,nil];
NSLog(@"%@",filter.attributes);
[filter setDefaults];
// 获取绘制上下文
CIContext *context = [CIContext contextWithOptions:nil];
// 渲染并输出CIImage
CIImage *outputImage = [filter outputImage];
// 创建CGImage句柄
CGImageRef cgImage = [context createCGImage:outputImage
fromRect:[outputImage extent]];
// 获取图片
UIImage *showImage = [UIImage imageWithCGImage:cgImage];
// 释放CGImage句柄
CGImageRelease(cgImage);
(2) CGSize newSize = CGSizeMake(320, 480);
UIGraphicsBeginImageContext(newSize);
[self.imageView2.image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
[self.imageView1.image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)blendMode:kCGBlendModeMultiply alpha:1.0];
UIImage *blendImage =UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
二:undo/redo功能
实际上是存储画过的path,width,alpha 到集合中,undo删除集合最后一个重新全部从数组依次取出path,width,alpha重新在画布上画,redo,是undo操作时将该path放入缓存的数组之中,redo时取出添加到原数组,再次重绘。
好资源:http://www.cnblogs.com/xdream86/archive/2012/12/12/2814552.html
2.Undefined symbols for architecture i386:问题
解答:一般是第三方库的问题。
3.解析网络请求返回的字典数据时注意使用dir[@”data.text”],注意dir[@”data”] 是否存在,不然会报NSNull 错误,今天因为这个原因废了好长时间。
4.最近做一个播放网络视频的例子:
代码如下:
-(void) playVideo:(NSString*) urlStr
{
NSURL *url=[[NSURL alloc] initWithString:urlStr];
self.moviePlayer=[[MPMoviePlayerController alloc] init];
self.moviePlayer.movieSourceType = MPMovieSourceTypeStreaming;
[self.moviePlayer setContentURL:url];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:)name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
self.moviePlayer.controlStyle=MPMovieControlStyleDefault;
self.moviePlayer.shouldAutoplay=YES;
[self addSubview:self.moviePlayer.view];
[self.moviePlayer setFullscreen:YES animated:YES];
}
- (void)moviePlayBackDidFinish:(NSNotification*)notification
{
[[NSNotificationCenter defaultCenter] removeObserver:self
name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
if ([self.moviePlayer respondsToSelector:@selector(setFullscreen:animated:)])
{
[self.moviePlayer.view removeFromSuperview];
}
}
注意要点:点击播放后,回调还没有执行,self不能被销毁,否则回调出错
5.注意写项目时能直接用hidden的就不要用removeFromSuperView
6.最近项目用到tableView,出现这样的情况,删除最后一行后,reload,再次点击最后一个列表还是不能点击(8.22)
原因:删除操作未完成,就开始reload 解决:延迟reload操作0.1s
7.今天更新项目,删掉了.xib文件后程序无法正常启动(8.25)
原因:mian.m中代码错误 解决改为与AppDelegate关联即可
8.今 天更新关于图片特效处理的项目,使用到数据的存储,起初用int*去存储,发现真机上一运行就crash,发现是因为像素点的数据值太大超过范围值。
解决:改为用unsign char*去存储,每个像素点存4个值。
9.更新项目遇到一个问题;
问题描述:tableView 点击cell,跳转,返回,再次点击cell ,running in loop.
分析:重复调用-reloadRowsAtIndexPaths:withRowAnimation:触发tableView去请求数据,程序将陷入死循环。
解决:不要重复调用-reloadRowsAtIndexPaths:withRowAnimation:,data与UI区分开来。
1、在使用第三方基于FlipSquaresNavigationController做动画的时候(push),在做动画的过程中会出现动画卡的现象,原因是在FlipSquaresNavigationController做动画的方法里面,调用了下个界面的.view属性,这个时候会执行viewDidLoad方法,如果在viewDidLoad里面创建UI的话,会占用主线程,照成动画的卡顿,解决方法可以在viewWillAppear:或者是viewDidAppear:里面创建UI .
2.、在使用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里面一定要加: