[转载] iOS问题汇总

把自己项目中遇到的问题总结一下,供大家参考,希望大家多多提出意见!!
转载:原文地址 :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;
  1. 在每个页面的入口和出口(一般是viewDidLoad和dealloc)打上日志,可以了解用户的操作流程,并查出页面在关闭时是否销毁了相应的对象。

  2. 定时器NSTimer 需要在一个新线程中运行,否则UI操作会阻塞定时器。

  3. 需要为定时器所在的线程设置NSRunLoop,否则定时器可能不会动。

  4. 如果在线程中设置了NSRunLoop,需要在销毁线程时也将其停止,使用CFRunLoopStop 。

  5. 所有的UI操作都应该在主线程中执行,否则会导致应用崩溃(不一定是立即崩溃)。

  6. 如果项目中有c函数,出现同名的函数会导致应用编译失败,即使这些c函数处于不同的页面中。

  7. 使用ASIHttpRequest,同步下载过程是不能被取消的,异步下载过程才可以被取消。

  8. 应用内支付,支付成功的回调里面,还需要对加密数据transactionReceipt 进行验证,避免越狱的机器使用 IAPFree 等软件伪造数据。

  9. 不要试图获取设备的UDID,否则会造成应用审核不通过。可以使用OpenUDID 或者 Mac 地址代替。

10.将比较费时的操作不要放在主线程中执行,避免UI响应慢。应该在一个新线程中执行(对有同步要求的操作除外)。

11.使用最新的Xcode and iOS SDK进行开发,对高版本的兼容性会好一些。例如Mac 10.6下只能安装Xcode4.2and iOS SDK 5.0 ,对iOS 5.1版本的系统就不能直接调试。

  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等其他框架,则有另外一套命名规则。

一些好用的框架/组件:

  1. PDColoredProgressView进度条组件,可以设置进度条的颜色,支持iOS4。但是在ASIHttpRequest的下载进度条中不好使用。

  2. MTLabel可以对label中的文字设置行高。

  3. TSAlertView可以在弹出框(UIAlertView)中设置输入框,类似于JavaScript中的prompt 。

  4. ZipArchive对文件进行压缩和解压操作。

  5. ASIHTTPRequest数据的上传和下载,以及断点续传。

  6. json-framework文件格式解析。
    性能优化

  7. 使用xcode自带的 Instruments工具可以查看应用的内存,cpu等资源使用情况。

  8. JSON格式解析速度优化。有人分析说 JSONKit 比 json-framework 效率更高。
    日志跟踪

  9. 友盟,比较全面的数据分析工具。

  10. 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里面一定要加:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值