一、我是 Cell自适应高度 传送门
二、我是 Cocoapods 安装
三、iOS本地数据存取----偏好设置、归档、数据库
一、发送选择器错误 1、[__NSCFDictionary away_name]: unrecognized selector sent to instance 0x7fe098d22050 Debug:字典和away_name类型不一样,字典不能调用away_name的方法,从而导致bug,应该从两者的类型改正
2.调用方法失败 [__NSCFString objectForKeyedSubscript:]: unrecognized selector sent to instance 0x7c9baaf0'
Debug:String和字典的类型不匹配,表示获取失败。
2.类型错误
这个出现在遍历数组时,发生的类型错误。
二、Xcode7 特性。 1.关于HTTP->HTTPS App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file. Debug****:****
在****info.plist****最后加入
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
三、数据解析
JSON类 1、如果解析出来的response数据结构是数组,则直接用数组接收;
[Http_Toolget:CPU_Urlparameters:nilsuccess:^(idresponse) {
NSArray* array = [NSJSONSerializationJSONObjectWithData:responseoptions:NSJSONReadingAllowFragmentserror:nil];
JSONModelArray* modelArray = [[JSONModelArrayalloc]initWithArray:arraymodelClass:[DetailModelclass]];
for(DetailModel* modelinmodelArray) {
[self.dataSourceaddObject:model];
}
[self.tableViewreloadData];
NSLog(@"%@",self.dataSource);
}failure:^(NSError* error) {
NSLog(@"%@",error);
}];
2、如果解析出来的response数据结构是字典,则直接用字典接收;
如果字典中带有其他的数组或字典,则直接通过键值查找到自己需要的字典外层;
NSError* error =nil;
NSDictionary* responseDict = [NSJSONSerializationJSONObjectWithData:responseoptions:NSJSONReadingAllowFragmentserror:&error];
NSArray* applicaitonsArray = responseDict[@"applications"];
JSONModelArray* array = [[JSONModelArrayalloc]initWithArray:applicaitonsArraymodelClass:[LimitFreeModelclass]];
for(LimitFreeModel* modelinarray) {
[self.dataSourceaddObject:model];
}
[self.tableViewreloadData];
[self.headViewendRefreshing];
[self.footViewendRefreshing];
//字典里套字典,则直接用dict去多层,知道你想要的那层数据结构,比如dict[@“des”][@“result”],如果是数组,则建数组接,
法二、
[Http_Toolget:nearby_urlparameters:paramsisIgnoreCache:YESsuccess:^(idresponse) {
NSDictionary* dict = [NSJSONSerializationJSONObjectWithData:responseoptions:0error:nil];
NSArray* apps = [LimitFreeModelarrayOfModelsFromDictionaries:dict[@"applications"]];
[self.nearbyAppsArrayaddObjectsFromArray:apps];//apps里的每个元素作为self.nearbyAppsArray的一个个数组元素 [selfupdateNearbyUI];
}failure:^(NSError* error) {
}];
3.如果着实查不出或取不到想要的那层数据,则直接采取字典取值的方法,不再使用Model类。
// NSLog(@"%@",response); NSDictionary * dic = response[@"result"];
NSArray * arr = dic[@"games"];
for(inti=0; i< arr.count; i ++) {
NSDictionary * dataarray = arr[i];
NSArray * arraydata = dataarray[@"data"];
JSONModelArray * array = [[JSONModelArray alloc] initWithArray:arraydata modelClass:[AppModel class]];
for(AppModel * modelinarray) {
[self.dataSource addObject:model];
}
}
//一级数组里套一级字典,字典里面套二级数组,数组里的是二级字典,1.用字典遍历一级数组取得每个一级字典,建二级数组接每个一级字典的值,每个二级数组得到的就是一个一个的字典,所以就用字典去遍历这个二级数组,二级字典里的键值对就是要得到的数据。
XML类 1.层层获取,一层一层刨;这是使用GData第三方框架 // NSString * str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];这个可以直接查看到数据的结构以及XML格式下的名字等 // NSLog(@"%@",str);
if(self.currentPage==1) {
[self.dBaseArrayremoveAllObjects];
[self.dataSourceremoveAllObjects];
[selfdeleteCache];
}
GDataXMLDocument* doc = [[GDataXMLDocumentalloc]initWithData:responseoptions:NSUTF8StringEncodingerror:nil];
GDataXMLElement* rootElement = [docrootElement];
NSArray* resourceEleArray = [rootElementelementsForName:@"resource"];
for(GDataXMLElement* elementinresourceEleArray) {
//获取子结点 Model* model = [[Modelalloc]init];
model.name= [[elementelementsForName:@"name"][0]stringValue];
model.introduce= [[elementelementsForName:@"introduce"][0]stringValue];
model.url= [[elementelementsForName:@"url"][0]stringValue];
[self.dataSourceaddObject:model];
[self.dBaseArrayaddObject:model];
}
[self.tableViewreloadData];
四、TableView的BUG处理
** 1.[UISectionRowData refreshWithSection:tableView:tableViewRowData:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3505.16/UITableViewRowData.m:540** Debug:dataSource的问题导致了返回的数组值出现错误。应检查数组的添加
五、 当想要改变界面指向,而且界面时storyboard时,这样写有错
idmainVc = [UIStoryboardstoryboardWithName:@"Main"bundle:nil];
***** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIStoryboard _preferredInterfaceOrientationGivenCurrentOrientation:]: unrecognized selector sent to instance 0x7fbf435d15e0'**
正解: idmainVc = [[UIStoryboardstoryboardWithName:@"Main"bundle:nil]instantiateInitialViewController]
贰、零碎知识
1.动画整理 SortViewController* svc = [[SortViewControlleralloc]init];
//给试图控制器切换的时候,添加动画 CATransition* animation = [CATransitionanimation];
animation.type=@"reveal";
animation.subtype=@"fromLeft";
animation.duration=1.0;
[self.view.superview.layeraddAnimation:animationforKey:nil];
[self.navigationControllerpushViewController:svcanimated:YES];
2.给视图添加手势,可记录点击的标记
iconImageView.userInteractionEnabled=YES;
iconImageView.layer.cornerRadius=5.0;
iconImageView.tag=10+ index;//添加tag作为标记 iconImageView.layer.masksToBounds=YES;
UITapGestureRecognizer* tap = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(nearbyAppClick:)];
[iconImageViewaddGestureRecognizer: tap];
[self.nearbyScrollViewaddSubview:iconImageView];
//取出点击到的App的model LimitFreeModel* model1 =self.nearbyAppsArray[tap.view.tag-10];
self.model= model1;
3.//设置标题UINavigationBar的样式
[[UINavigationBarappearance]setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColorwhiteColor]}];//设置白色字体
[UINavigationBarappearance]setBackgroundImage:[[UIImageimageNamed:@"NavigationBarShadow"]stretchableImageWithLeftCapWidth:0.5topCapHeight:0.5]forBarMetrics:UIBarMetricsDefault]; // 设置背景图片
4.添加.pch文件
.pch文件是全局共享的头文件,对于经常使用的对象、宏定义等可以声明在pch文件中。在Build Setting中搜索.pch文件名字,添加路径如“工程名/XXX.pch”
还有个路径就是 "${SRCROOT}工程名/XXX.pch"
5.价格划线
[cell.pastPriceLabelsetAttributedText:[self attibutedStringWithString:[NSStringstringWithFormat:@"¥%@", model.price]]];——>调用方法
- (NSAttributedString*)attibutedStringWithString:(NSString*)string
{
NSMutableAttributedString* attributeString = [[NSMutableAttributedStringalloc]initWithString:stringattributes:@{NSStrikethroughStyleAttributeName:[NSNumbernumberWithInteger:NSUnderlineStyleSingle]}];
//,NSStrikethroughColorAttributeName:[UIColor purpleColor] 设置颜色 returnattributeString;
}
6.给工程适配多语言
1⃣️ 首先在工程文件的info选项下找到localization,添加语言。
2⃣️ 在工程中新建文件:resource —>String File ,改名为InfoPlist,把系统info.plist 源文件中的“CFBundleName”,复制到相应语言文件中如中文文件:CFBundleName ="徒步旅行”;,英文下:CFBundleName ="OnFootTravel”;。改变模拟器的语言状态既可显示相应的App名字。注意无 “@”
7、telnet (IP地址) 端口(80) 可查看服务器是否开启。
image.png8,计算固定大小的字符串尺寸
// 获取固定大小下字符串的尺寸 CGSizetextMaxSize =CGSizeMake(150,MAXFLOAT);
NSDictionary*attrs =@{NSFontAttributeName: [UIFontsystemFontOfSize:14.0]};
CGSizetextSize = [_iMessageboundingRectWithSize:textMaxSizeoptions:NSStringDrawingUsesLineFragmentOriginattributes:attrscontext:nil].size;
9.让App在后台一直运行
【链接】iOS开发:保持程序在后台长时间运行
http://www.cnblogs.com/wskgjmhh/p/5235947.html【链接】iOS让你的app一直在后台活着(运行)
网友评论