iOS开发-项目中经常的问题

本文分享了iOS开发中常见的问题及解决方案,包括URL编码、数据类型匹配、数组越界等错误处理,以及UIScrollView、UICollectionView的正确使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IOS Url Encode(POST上传的时候,汉字上传的格式为%AE这种形式),可以通过下面方法进行转换。
-(NSString*)UrlValueEncode:(NSString*)str
{
    NSString *result = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)str, NULL,CFSTR("!*'();:@&=+$,/?%#[]"),kCFStringEncodingUTF8));
    [result autorelease];
  
    NSLog(@"%@",result);
      return result;
}
常见问题的解决方案
在解析网络返回数据的时候,接收数据类型不匹配,比如:比如说返回的是NSNumber,接收用NSString。
4、数组越界的问题(常见情况是:先进行网络请求的语句,但是在下面语句紧接着就使用了接收网络数据的NSArray或者是NSMutableArray),对一个元素个数为0的数组进行objectAtIndex:操作,导致数组越界,解决方法是在从数组中取元素的时候,对数组进行[array count]判断;保证数组中元素个数不为0,然后再对数组进行操作。
网络返回数据为<null>时,不知道如何进行判断,出现这种情况的原因就是,后端返回的数据没有给默认值,可以通过[responseData isEqual:[NSNull null]]进行判断。

从网上下载的demo,在参照demo自己写的时候,莫名其妙的出现崩溃的情况,一般情况下都是,网上的Demo使用的时ARC,但是学生在自己工程里面使用的时MRC,导致某些对象提前释放。解决方法,在TARGETS-Build Phases-Compile Sources 对应的.m文件添加-fobjc-arc。如果想让某个类不使用ARC那么可以在TARGETS-Build Phases-Compile Sources 对应的.m文件添加-fno-objc-arc。
在IOS7中UINavigationController中使用UITextView或者UIScrollView的时候,文本的对齐方式,垂直方向的对齐方式是居中对齐,不是上对齐,需要在viewDidlLoad里面添加:
automaticallyAdjustsScrollViewInsets
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0){
        self.automaticallyAdjustsScrollViewInsets = NO; // Avoid the top UITextView space, iOS7 (~bug?)
    }
在使用UIScrollView的时候也会出现偏移。
在使用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,UICollectionViewDelegateFlowLayout>
UITableViewCell的在IOS5和IOS6有不同的初始化方法,在IOS6中采用- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath对UITableViewCell进行初始化时,需要使用配套的- (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier方法对UITableViewCell进行注册。
在UITableViewCell中动态展示数据的时候,可以在自定义Cell里面写一个类方法来专门计算Cell的高度。
得到当前工程的目录”$(SRCROOT)”
如果创建的工程,运行时发现self.view的高度只有480,那么原因就是缺少了4英寸的启动图片Default-568h@2x.png.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值