iOS_开发中遇到的那些问题_6
2015-12-14 20:30
471 查看
【自编号:590】【代码获取info.plist中的url schemes】
【自编号:593】【可变参数的实现】
【自编号:596】【捋捋更新的逻辑】
【自编号:597】【AFN返回原始数据】
【自编号:599】【sqlite时间比较】
【自编号:600】【iOS中的空】
【自编号:602】【webView和textView自带的检测dataDetectorTypes】
【自编号:605】【iOS 8创建交互式通知】
【自编号:606】【userDefault测试】
【自编号:607】【涉及到金额,不要用float和double;】
【自编号:611】【iOS9支持HTTPS】
【自编号:613】【去重复】
【自编号:618】【10-character App ID Seed】
【自编号:619】【超赞_iOS Provisioning Profile(Certificate)与Code Signing详解】【查看原文】 【2015-10-01 02:54:47 by beyond】
【自编号:621】【有关代码签名的】【进入网址】 【2015-10-01 03:09:43 by beyond】
【自编号:622】【webView音频不全屏】
【自编号:623】【github上的Reachability】【点击下载】 【2015-10-08 10:15:40 by beyond】
【自编号:627】【iOS9开始在安装时:网页上的plist填写的bundleID必须和app中info.plist中的、以及证书中的bundleID一模一样】【2015-10-08 17:15:26 by beyond】
【自编号:630】【iOS上所有的字体】
【自编号:632】【SVProgressHUD的github】【点击下载】 【2015-10-08 23:19:56 by beyond】
【自编号:634】【加分项:Masonry介绍与使用实践(快速上手Autolayout)】【查看原文】 【2015-10-09 09:52:51 by beyond】
【自编号:635】【启动图片设置详解】【查看原文】 【2015-10-09 10:39:01 by beyond】
【自编号:636】【自动生成的启动xib】
【自编号:639】【启动图片尺寸】
【自编号:641】【iPhone作为服务器】【查看原文】 【2015-10-09 18:27:31 by beyond】
【自编号:642】【build时,找不到库】
【自编号:648】【遇到一个bug】
【自编号:649】【xib上添加手势】
【自编号:650】【iOS9上window必须有rootVC】
【自编号:651】【xib上的scrollView的弹簧效果】
【自编号:652】【iOS7.1.2莫名崩溃,iOS,negError】
【自编号:655】【-[UITableView _contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:]: row (0) beyond bounds (0) for section (0).】
【自编号:656】【NSUserDefaults的dictionaryRepresentation】
【自编号:657】【sqlcipher加密数据库】【查看原文】 【2015-10-16 15:49:59 by beyond】
【自编号:658】【SQLite加密工具】
by beyond】
【自编号:662】【UILabel顶对齐】
【自编号:664】【https请求的代理方法处理】【查看原文】 【2015-10-21 17:42:28 by beyond】
【自编号:665】【瀑布流中偶得】
【自编号:666】【objc_msgSend报错参数太多】
【自编号:669】【给按钮设置NSMutableAttributedString】
【自编号:671】【应用内置appstore评分功能】
【自编号:675】【常用物理动画介绍】【查看原文】 【2015-10-28 16:50:54 by beyond】
【自编号:676】【app动态交互设计合辑】【进入网址】 【2015-10-28 18:41:33 by beyond】
【自编号:677】【【长篇高能】ReactiveCocoa 和 MVVM 入门】
【自编号:684】【提示attempt to insert nil,但是断不下来】
【自编号:685】【因继承带来的unrecognized selector sent to instance】
【自编号:697】【ASIdentifierManager】【查看原文】 【2015-11-07 19:08:48 by beyond】
【自编号:700】【IAP_的那些坑】【进入网址】
【点击观看】
【查看原文】 【2015-11-08 20:46:04 by beyond】
【自编号:703】【xib冲突报错:Line 507 :Extra content at the end of the document,最后找了一个正常的xib覆盖错的】【2015-11-10 16:09:18 by beyond】
【自编号:704】【从根控制器push到其他ctrl的时候,如果直接设置tabbar.hidden,会有问题:在其他控制器内:底部44的高度无法接收点击事件;原因是:底部44区域依然是tabbar控制器的,不属于当前的控制器,不知道对不对???】【2015-11-10 16:21:39 by beyond】
【自编号:706】【lipo详解+duplicate symbol】
【自编号:709】
【自编号:736】【录音一直不成功】
【自编号:740】【字典的遍历】【查看原文】 【2015-12-02 18:29:43 by beyond】
【自编号:741】【Paros 抓包】【查看原文】
【软件介绍】 【2015-12-02 18:30:48 by beyond】
【自编号:742】【NSNotification与多线程】【查看原文】 【2015-12-03 16:14:17 by beyond】
【自编号:747】【iOS_切换扬声器状态】
【自编号:755】【Xcode真机测试could not find developer disk image解决方法】
【点击下载】 【2015-12-09 11:52:16 by beyond】
【自编号:760】【dyld: Library not loaded: Reason: image not found 解决办法】
【自编号:766】【一堆的错误...】
【自编号:769】【iOS隐藏tableview多余的分割线】
【自编号:770】【libxml 找不到的解决办法】
#pragma mark - 支付宝客户端回调url schemes - (NSString *)pay_end_callBack_url { // NSString *versionStr = [[NSBundle mainBundle]objectForInfoDictionaryKey:@"CFBundleVersion"]; NSArray *urlTypesArr = [[NSBundle mainBundle]objectForInfoDictionaryKey:@"CFBundleURLTypes"]; NSDictionary *dict = [urlTypesArr lastObject]; NSArray *subArr = [dict objectForKey:@"CFBundleURLSchemes"]; NSString *callBackUrl = subArr[0]; return callBackUrl;//QQASDFASDF }【2015-09-15 13:55:07 by beyond】
【自编号:593】【可变参数的实现】
//姑且设定 输出一个人的姓名,性别,还有去过的城市~~ //类名很挫 别介意 有成果就行 MutableParameter.h - (void) MutableParameterTest:(NSString *) name gender:(Boolean) gender, ...; MutableParameter.m - (void) MutableParameterTest:(NSString *) name gender:(Boolean) gender,... { if (gender) { NSLog(@"name:%s gender:male",name); } else { NSLog(@"name:%s gender:famela",name); } NSString *city; va_list cityList; if (gender) { va_start(cityList,gender); while (city=va_arg(cityList,id)) { NSLog(@"%@",city); } } } 调用 MutableParameter *mp=[[MutableParameter alloc] init]; [mp MutableParameterTest:@"Jonsn" gender:YES ,@"xian",@"wuhan",@"guanghzou"]; 解释下~~ va_list argList:定义一个指向个数可变的参数列表指针; #define va_start(v,l) __builtin_va_start(v,l) va_start(argList,statement):使参数列表指针arg_ptr指向函数参数列表中的第一个可选参数,说明:argN是位于第一个可选参数之前的固定参数,(或者说,最后一个固定参数;…之前的一个参数),函数参数列表中参数在内存中的顺序与函数声明时的顺序是一致的。如果有一va函数的声明是void va_test(char a, char b, char c, …),则它的固定参数依次是a,b,c,最后一个固定参数argN为c,因此就是va_start(arg_ptr, c)。 #define va_end(v) __builtin_va_end(v) va_end(arg_ptr):清空参数列表,并置参数指针arg_ptr无效。 #define va_arg(v,l) __builtin_va_arg(v,l) va_arg(argList,id):返回参数列表中指针arg_ptr所指的参数,返回类型为type,并使指针arg_ptr指向参数列表中下一个参数。 #if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L #define va_copy(d,s) __builtin_va_copy(d,s) #endif #define __va_copy(d,s) __builtin_va_copy(d,s) va_copy(d,s) 前面的参数貌似是目的变量 后面的是源变量 这个没用过~~【2015-09-15 18:08:25 by beyond】
【自编号:596】【捋捋更新的逻辑】
//正常状态下 // 老版本 当时打包的时候是 3,新版本的时候改成4(与服务器一样) // 那么,当点击了老版本的检查更新的时候,服务器取回的是4>3(当时的本地的值),就会提示更新 // 那么,当点击了新版本的检查更新的时候,服务器取回的是4>4(此次的本地的值),就会提示当前最新 if(VersionInfo.FVersionNo>UpDateAppCode){ WCAlertView *alert =[WCAlertView showAlertWithTitle:@"软件版本更新" message:@"版本有更新,是否升级?" customizationBlock:^(WCAlertView *alertView){ [alertView setStyle:WCAlertViewStyleBlack]; } completionBlock:^(NSUInteger buttonIndex, WCAlertView *alertView) { if (buttonIndex == 1){ [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[[Tools readforplist] objectForKey:@"KLChannel"][0]]]; } } cancelButtonTitle:@"下次再说" otherButtonTitles:@"马上升级", nil]; //如果是自动检测 在版本状态不属于警告和提醒的情况下 不提醒用户升级版本 if(![mode isEqualToString:@"1"]) { [alert show]; } }else{ if([mode isEqualToString:@"2"]){ if (IS_MORE_IOS7) { [SVProgressHUD showSuccessWithStatus:@"当前版本已是最新"]; } else { UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"当前版本已是最新" message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定", nil]; alertView.delegate = self; [alertView show]; } } }【2015-09-17 17:08:52 by beyond】
【自编号:597】【AFN返回原始数据】
- (id)responseObject { [self.lock lock]; if (!_responseObject && [self isFinished] && !self.error) { NSError *error = nil; self.responseObject = [self.responseSerializer responseObjectForResponse:self.response data:self.responseData error:&error]; if (error) { self.responseSerializationError = error; } } [self.lock unlock]; return _responseObject; } po self.response { URL: http://192.168.1.124:888/rest/v10/GetHvHotelDetail } { status code: 200, headers { "Cache-Control" = "no-cache"; "Content-Length" = 1458; "Content-Type" = "application/json; charset=utf-8"; Date = "Thu, 17 Sep 2015 10:49:15 GMT"; Expires = "-1"; Pragma = "no-cache"; Server = "Microsoft-IIS/7.5"; "X-AspNet-Version" = "4.0.30319"; "X-Powered-By" = "ASP.NET"; } } po self.responseString {"Success":true,"Msg":"","Content":{"FVID":"471449d6-baf2-48c3-9d64-839392a8b178","FVName":"打算打打杀杀","FHouse":null,"FRight":null,"FInteraction":null,"FTravel":null,"FTitle":"出不出得来","FSummary":"123456","FDescription":" 1323123123123 ","FAddress":"12312312312","FAbout":null,"FEID":"00000000-0000-0000-0000-000000000000","FIsCollect":false,"LImages":[{"Id":0,"Url":"http://folder-image1.oss.aliyuncs.com/201509/smart-hv/content/bd323a24-05ca-41fb-ba33-8fb94110c69e.png","FDescribe":null,"FStyle":0},{"Id":0,"Url":"http://folder-image1.oss.aliyuncs.com/201509/smart-hv/content/8dae776c-b52d-4eaa-9ecd-f9e2c134fa30.png","FDescribe":null,"FStyle":1},{"Id":0,"Url":"http://folder-image1.oss.aliyuncs.com/201509/smart-hv/content/0e94a5d3-ac83-4134-a163-629ef17810af.png","FDescribe":null,"FStyle":2}],"LHotelRule":[{"HRID":"7f377c1d-5063-416f-86a0-2b963a21529a","FTitle":"dasdasd","FMInformation":"dasdasdas","FStyle":4,"FIsAbout":false}],"LHotelRuleAbout":[],"FCustodianID":585944,"FAcreage":120,"FCustodianPhone":"15622222222","FDiscountInfo":"","FRooms":1,"FBeds":0,"FHouseType":"三室一厅","FPeoples":2,"FLevaeTime":"12:00","FCustodianName":"吴里涛","FCustodianUrl":null,"FEquipment":[],"LRemarkItems":null,"FOriginal":332.00,"FContent":"111111","FRemarkScore":0.0,"FCollections":0,"FRemarkCount":0,"FHType":"三室一厅","FPrice":124.00,"Id":"e05b8fd2-fc8c-4122-acaf-7cc3b7196584","FName":null,"FTitleImgUrl":null},"Zip":false}【2015-09-17 18:51:53 by beyond】
【自编号:599】【sqlite时间比较】
iOS关于SQLite存取时间数据类型的两条常用方法。 通过在Google,StackOverFlow很多的东西,大概有经验的程序猿会这样: 1.把时间通过NSDateFormatter 通过stringFromDate某种格式,然后存字符串。取的时候同样取某个串,通过同一个formatter 的dateFromDate获取NSDate对象。 NSDateFormatter*dateFormat =[[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSString*dateString=[dateFormat stringFromDate:[NSDate date]]; sqlite3_bind_text(saveStmt,1,[dateString UTF8String],-1, SQLITE_TRANSIENT); 2.把时间通过NSDate的timeIntervalSince1970获取double类型存进数据库, 取时间时会通过NSDate timeIntervalSince1970:doubleValue 获取NSDate对象。 I typically use a double, something like: sqlite3_bind_double(statement, index,[dateObject timeIntervalSince1970]); where dateObject is an NSDate*. Then, when getting the data out of the DB, use [NSDate dateWithTimeIntervalSince1970:doubleValueFromDatabase];【2015-09-20 16:05:28 by beyond】
【自编号:600】【iOS中的空】
nil :指向一个对象的空指针 (可以给对象赋值) 形式 Nsstring * str = nil; Nil :类的空指针 (类指针为空) Class class = Nil; null: 其他类型(基本类型,c类型) int * num = null; (重点)NSNull 表示集合中的空值 (数组字典中可以使用来做占位符) NSArray * arr = [NSArray arrayWithObjects:@"1",1,[NSNull null],nil]; 问题就出在 后台服务器 有时候会传 NSNull集合类型 在以前的的项目中 碰到过这样的问题 只能用[NSUull null] 去判断【2015-09-21 19:38:05 by beyond】
【自编号:602】【webView和textView自带的检测dataDetectorTypes】
typedef NS_OPTIONS(NSUInteger, UIDataDetectorTypes) { UIDataDetectorTypePhoneNumber = 1 << 0, // Phone number detection UIDataDetectorTypeLink = 1 << 1, // URL detection #if __IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED UIDataDetectorTypeAddress = 1 << 2, // Street address detection UIDataDetectorTypeCalendarEvent = 1 << 3, // Event detection #endif UIDataDetectorTypeNone = 0, // No detection at all UIDataDetectorTypeAll = NSUIntegerMax // All types };【2015-09-22 11:55:00 by beyond】
【自编号:605】【iOS 8创建交互式通知】
为了创建交互式通知,需要iOS 8提供的3个新类:UIUserNotificationSettings, UIUserNotificationCategory, UIUserNotificationAction 以及它们的变体。【查看原文】 【2015-09-22 20:59:03 by beyond】
【自编号:606】【userDefault测试】
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults]; [userDefault setObject:[NSDate date] forKey:@"currentTime"]; [userDefault synchronize]; Documents Library:Caches+Preferences tmp xxx.app 默认的保存位置是: app--->Library--->Preferences---->com.31.xxx.app.plist 打开后,可以看到root是一个字典 currentTime对应的2015/09/23 9:47:28 // 将代码改动一下,key名字换成currentTime2,再次运行cmd+r 结果 发现文件变大了,原来的currentTime还在,又多了一个currentTime2 // 结论就是: // 下面再测试一下 覆盖安装的方法 先从http://www.pgyer.com可fir.im下载demo,安装 后,运行后,结束程序; 打开iFunBox,打开app里面的plist,看到currentTime--->2015/09/23 10:20:36 重要的来了,再次下载demo,覆盖安装,但是不打开,不运行; 使用iFunBox,打开app里面的plist,看到依然还在!!! 结论:覆盖安装时,原来userDefault保存的数据 不会被清空【2015-09-23 10:35:33 by beyond】
【自编号:607】【涉及到金额,不要用float和double;】
服务器要FAmout,传NSNumber; NSNumber怎么来?NSNumberFormatter类的对象方法 numberFromString,可以将string转成NSNumber string怎么来?用单价乘以金额方法在最下面NSDecimalNumber NSString *str = @"0.09"; NSNumberFormatter *nf = [[NSNumberFormatter alloc]init]; NSNumber *num = [nf numberFromString:str]; NSLog(@"----%@",num); - (NSString *)tool_totalPrice { int count = [self tool_countNumber]; NSString *s1 = [NSString stringWithFormat:@"%d",count]; NSString *s2 = [NSString stringWithFormat:@"%.02f",[self.roomPrice floatValue]]; NSString *result = [self decimalNumberMutiplyWithString:s1 andString:s2]; // 乘以 晚 数 NSString *s3 = [NSString stringWithFormat:@"%d",[self tool_daySpan]]; result = [self decimalNumberMutiplyWithString:result andString:s3]; DLog(@"result--%@",result); return result; } - (NSString *)decimalNumberMutiplyWithString:(NSString *)multiplierValue andString:(NSString *)multiplicandValue { DLog(@"%@----%@",multiplicandValue,multiplicandValue); NSDecimalNumber *multiplierNumber = [NSDecimalNumber decimalNumberWithString:multiplierValue]; NSDecimalNumber *multiplicandNumber = [NSDecimalNumber decimalNumberWithString:multiplicandValue]; NSDecimalNumber *product = [multiplicandNumber decimalNumberByMultiplyingBy:multiplierNumber]; NSString * result = [product stringValue]; DLog(@"乘积:%@",result); return result; }【2015-09-23 17:05:26 by beyond】
【自编号:611】【iOS9支持HTTPS】
NSAppTransportSecurity NSAllowsArbitraryLoads【2015-09-28 11:45:37 by beyond】
【自编号:613】【去重复】
- (NSMutableArray *)p_queryJoinSites { NSMutableArray *array = [NSMutableArray arrayWithCapacity:1]; // 新增 FAppVerCode = 1,其中1是sht,3是xfxc NSString *where = @"FAppVerCode != 3 AND FUpSCode = '' AND FIsUserBind = 0 AND FName != '' AND FStatusCode != -2 AND FStatusCode != -1"; NSString *order = @"FStickDate DESC, FStatusCode ASC, FIsRealAudit DESC, FIsGroupSite DESC, FSCode ASC"; NSMutableArray *datas = [self.helper query4Table:KLTB_SITE_INFO args:where order:order columns:nil]; for (NSDictionary *dic in datas) { KLSiteInfoJoin *site = [self p_joinSiteFormatWithDic:dic]; if (site.FUpSCode.length > 0 || site.FName.length == 0 || site.FStatusCode.intValue == -2 || site.FStatusCode.intValue == -1) { continue; } [array addObject:site]; } DLog(@"--old count:%d",array.count); NSMutableArray *distinctArr = [[NSMutableArray alloc] init]; for (unsigned i = 0; i < [array count]; i++){ KLSiteInfoJoin *model = array[i]; NSString *sid = model.FSCode; // 遍历前,设置检测标记 BOOL isContains = NO; for (KLSiteInfoJoin *newModel in distinctArr) { NSString *newsid = newModel.FSCode; if ([sid isEqualToString:newsid]) { // 一旦发现已经有了,中止此层循环 isContains = YES; break; } } // 遍历后,仍没有发现,此时方可添加 if (!isContains) { [distinctArr addObject:model]; } } DLog(@"--new count:%d",distinctArr.count); return distinctArr; }【2015-09-28 16:55:44 by beyond】
【自编号:618】【10-character App ID Seed】
distribution时build有关于application-identifier的警告 http://tiny4cocoa.com/viewthread.php?tid=1839&extra=&ordertype=1 This bundle is invalid. The application-identifier entitlement is not formatted correctly; it should contain your 10-character App ID Seed, followed by a dot, followed by your bundle identifier: com.companyname.appname (-19053) 问题解决了。把解决方法写在这,方便以后其它人遇到类似的问题可以参考。 我是添加了一个entitlements.plist文件然后设置key为application-identifier的值85B9GK2627.com.[mycompanyname].[appname] 。这样build后就不再出现这个bug了。【2015-10-01 02:42:15 by beyond】
【自编号:619】【超赞_iOS Provisioning Profile(Certificate)与Code Signing详解】【查看原文】 【2015-10-01 02:54:47 by beyond】
【自编号:621】【有关代码签名的】【进入网址】 【2015-10-01 03:09:43 by beyond】
【自编号:622】【webView音频不全屏】
首先HTML里video必须加上webkit-playsinline属性【2015-10-07 19:11:12 by beyond】
【自编号:623】【github上的Reachability】【点击下载】 【2015-10-08 10:15:40 by beyond】
【自编号:627】【iOS9开始在安装时:网页上的plist填写的bundleID必须和app中info.plist中的、以及证书中的bundleID一模一样】【2015-10-08 17:15:26 by beyond】
【自编号:630】【iOS上所有的字体】
NSArray* familys = [UIFont familyNames]; for (int i = 0; i<[familys count]; i++) { NSString* family = [familys objectAtIndex:i]; NSLog(@"Fontfamily:%@=====",family); NSArray* fonts = [UIFont fontNamesForFamilyName:family]; for (int j = 0; j<[fonts count]; j++) { NSLog(@"FontName:%@",[fonts objectAtIndex:j]); }【查看原文】 【2015-10-08 22:20:53 by beyond】
【自编号:632】【SVProgressHUD的github】【点击下载】 【2015-10-08 23:19:56 by beyond】
【自编号:634】【加分项:Masonry介绍与使用实践(快速上手Autolayout)】【查看原文】 【2015-10-09 09:52:51 by beyond】
【自编号:635】【启动图片设置详解】【查看原文】 【2015-10-09 10:39:01 by beyond】
【自编号:636】【自动生成的启动xib】
Launch screen interface file base name LaunchScreen.xib【2015-10-09 10:44:23 by beyond】
【自编号:639】【启动图片尺寸】
找到项目中的Images.xcassets,右击中区域,选择New Launch Image; 点击LaunchImage,可在最右边过滤要适配的设备及横竖屏; 将下面图片拖到对应的格子里面 Non-Retina 320X480 Retina 2x :640X960 Retina 4inch :640X1136 Retina 4.7inch :750X1334 Retina 5.5inch :1242X2208【2015-10-09 13:56:40 by beyond】
【自编号:641】【iPhone作为服务器】【查看原文】 【2015-10-09 18:27:31 by beyond】
【自编号:642】【build时,找不到库】
ld: library not found for -lMobClickLibrary clang: error: linker command failed with exit code 1 (use -v to see invocation) 其实是:libMobClickLibrary,自动加 ib【2015-10-10 11:34:33 by beyond】
【自编号:648】【遇到一个bug】
在nib画cell的时候,手一抖,拖了一个label 与cell平级了,后来马上删掉了(这里埋下祸根了,应该要ctrl+z) 然后运行程序 就一直崩溃在:[self.tableView dequeueReusableCellWithIdentifier:cellID];(打开全局断点了) 提示信息是: *** Assertion failure in -[UITableView _dequeueReusableViewOfType:withIdentifier:], /SourceCache/UIKit/UIKit-2935.138/UITableView.m:5413 不知所云,无奈,f7单步进入报错的内存地址列表, 命令行输入:po $r0 invalid nib registered for identifier (NoticeHasImageCell) - nib must contain exactly one top level object which must be a UITableViewCell instance 这时候,才看到错误所在了,就是由于先前手一抖,在cell的xib拖了一个顶级的label,导致tableview register nib时,生产不出来cell了【2015-10-12 15:27:52 by beyond】
【自编号:649】【xib上添加手势】
1.打开目标Label的userInteractionEnabled 2.在右下的控件面板找到想要添加的手势 3.将找到手势拖动到目标Label上 4.这时xib中间模块会多出一个Objects,里面放有一个手势,将这个与.m连线(sendAction或IBOutlet)【2015-10-13 16:33:05 by beyond】
【自编号:650】【iOS9上window必须有rootVC】
否则报错 *** Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3505.16/UIApplication.m:3294 解决方法: UIViewController* myvc = [[UIViewController alloc] initWithNibName:nil bundle:nil]; 或 UIViewController* vc = [UIViewController new]; self.window.rootViewController = myvc;【2015-10-13 16:44:29 by beyond】
【自编号:651】【xib上的scrollView的弹簧效果】
原则就是contentSize中的height要比scrollView的高度大1个点 示例: scrollview上面有一个button,距离顶10,左10;中间是一个很大的空白;底部是一个bottomLabel;底部bottomLabel距离下方scrollview10 先连上要用到的控件: scrollView、topBtn、bottomLabel、还有dynamicVConstraint(底标签距topBtn的动态距离,随手机高度动态变化) 开始上代码: - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // 默认是67 CGFloat vconstant = (self.scrooView.height - CGRectGetMaxY(self.xib_rightBtn.frame) - self.xib_bottomLabel.height -10)+1; DLog(@"vconstant__%f",vconstant); self.dynamicVConstraint.constant = vconstant; [self.view setNeedsLayout]; [self.view layoutIfNeeded]; }【2015-10-13 16:52:58 by beyond】
【自编号:652】【iOS7.1.2莫名崩溃,iOS,negError】
一个xib界面,scrollView里面的有一个5:3的ratio的两个按钮 结果,总是在ctrl界面快要崩溃,错误信息类似如下所示: Objective: {objective 0x7f8eb2562bf0: <750:8 17136e-08="" 251:162="" 250:444=""> + <750:1 250:-4="" 4788="">*0x7f8eb260bc30.negError{id: 225} + <251:1 250:4="" 4788="">*0x7f8eb260bc30.posErrorMarker{id: 224} + <750:1>*0x7f8eb260bcd0.negError{id: 227} + <251:1>*0x7f8eb260bcd0.posErrorMarker{id: 226} + <750:1 250:1="">*0x7f8eb260c2a0.negError{id: 229} + <750:1 250:1="">*0x7f8eb260c300.negError{id: 231} 后来百思不得其解,百度关键字【iOS negError】迅速找到类似的求助 http://stackoverflow.com/questions/28111635/ios-aspect-ratio-constraint-breaks-on-ios7-works-on-ios8 原来是:处理ratio比率的时候 崩溃了 把5:3改成一个固定为100,另一个占据余下的屏幕后,正常运行了 <!--750:1--><!--750:1--><!--251:1--><!--750:1--><!--251:1--><!--750:1--><!--750:8-->【2015-10-13 18:17:50 by beyond】
【自编号:655】【-[UITableView _contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:]: row (0) beyond bounds (0) for section (0).】
错误: *** Terminating app due to uncaught exception 'NSRangeException', reason: '-[UITableView _contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:]: row (0) beyond bounds (0) for section (0).' 3 UIKit 0x000000010d616d7c -[UITableView _contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:] + 1178 4 UIKit 0x000000010d61794a -[UITableView scrollToRowAtIndexPath:atScrollPosition:animated:] + 33 解决方法: 1.1在还没加载数据时就设置选中了,所以报错,应该加载完table以后再设置。。 1.2如果数据源为0时,就不用滚动了,加入if判断【2015-10-16 10:05:10 by beyond】
【自编号:656】【NSUserDefaults的dictionaryRepresentation】
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; NSDictionary *dictionary = [userDefaults dictionaryRepresentation]; NSLog(@"[NSUserDefaults allKeys] count ====== %ld", (long)[dictionary allKeys].count); for (NSString *key in [dictionary allKeys]) { if ([@"kLocalAddress" isEqualToString:key] || [@"kPosX" isEqualToString:key] || [@"kPosY" isEqualToString:key]) { continue; } [userDefaults removeObjectForKey:key]; } [userDefaults synchronize];【2015-10-16 15:30:14 by beyond】
【自编号:657】【sqlcipher加密数据库】【查看原文】 【2015-10-16 15:49:59 by beyond】
【自编号:658】【SQLite加密工具】
官方示例整合iOS:https://www.zetetic.net/sqlcipher/ios-tutorial/【查看原文】【点击下载】 【2015-10-19 13:48:07
by beyond】
【自编号:662】【UILabel顶对齐】
// -- file: UILabel+VerticalAlign.h #pragma mark VerticalAlign @interface UILabel (VerticalAlign) - (void)alignTop; - (void)alignBottom; @end // -- file: UILabel+VerticalAlign.m @implementation UILabel (VerticalAlign) - (void)alignTop { CGSize fontSize = [self.text sizeWithFont:self.font]; double finalHeight = fontSize.height * self.numberOfLines; double finalWidth = self.frame.size.width; //expected width of label CGSize theStringSize = [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight) lineBreakMode:self.lineBreakMode]; int newLinesToPad = (finalHeight - theStringSize.height) / fontSize.height; for(int i=0; i【查看原文】 【2015-10-19 15:06:06 by beyond】
【自编号:664】【https请求的代理方法处理】【查看原文】 【2015-10-21 17:42:28 by beyond】
【自编号:665】【瀑布流中偶得】
1,scrollView在滚动的时候,也会调用layoutSubviews方法 2,数组中存所有的CGRect时,要先将其转成NSValue对象,valueWithCGRect:【2015-10-21 23:06:46 by beyond】
【自编号:666】【objc_msgSend报错参数太多】
objc_msgSend()报错Too many arguments to function call ,expected 0,have3 Build Setting--> Apple LLVM 6.0 - Preprocessing--> Enable Strict Checking of objc_msgSend Calls YES改为 NO【2015-10-22 10:50:54 by beyond】
【自编号:669】【给按钮设置NSMutableAttributedString】
NSString *oldStr = [NSString stringWithFormat:@"已有%@条反馈",response]; NSMutableAttributedString *arrString = [[NSMutableAttributedString alloc]initWithString:oldStr]; // 设置前面几个字串的格式 fontWithName:@"Helvetica-Bold" size:16.0f NSString *numStr = [NSString stringWithFormat:@"%@",response]; [arrString addAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:18.0f], NSForegroundColorAttributeName:kColor(0, 117, 231) } range:[oldStr rangeOfString:numStr]]; [blockSelf.coutbtn setAttributedTitle:arrString forState:UIControlStateNormal];【2015-10-26 17:58:29 by beyond】
【自编号:671】【应用内置appstore评分功能】
在ios6.0,APPle增加了一个心得功能,当用户需要给APP评分时候,不再跳转到appstore了,可以在应用内实现打开appstore,苹果提供了一个框架StoreKit.framework,实现步骤如下: 1:导入StoreKit.framework,在需要跳转的控制器里面添加头文件#import 2:实现代理SKStoreProductViewControllerDelegate 3:- (void)evaluate{ //初始化控制器 SKStoreProductViewController *storeProductViewContorller = [[SKStoreProductViewController alloc] init]; //设置代理请求为当前控制器本身 storeProductViewContorller.delegate = self; //加载一个新的视图展示 [storeProductViewContorller loadProductWithParameters: //appId唯一的 @{SKStoreProductParameterITunesItemIdentifier : @"587767923"} completionBlock:^(BOOL result, NSError *error) { //block回调 if(error){ NSLog(@"error %@ with userInfo %@",error,[error userInfo]); }else{ //模态弹出appstore [self presentViewController:storeProductViewContorller animated:YES completion:^{ } ]; } }]; } //取消按钮监听 - (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController{ [self dismissViewControllerAnimated:YES completion:^{ }]; }【2015-10-27 10:33:40 by beyond】
【自编号:675】【常用物理动画介绍】【查看原文】 【2015-10-28 16:50:54 by beyond】
【自编号:676】【app动态交互设计合辑】【进入网址】 【2015-10-28 18:41:33 by beyond】
【自编号:677】【【长篇高能】ReactiveCocoa 和 MVVM 入门】
</pre><a target=_blank href="http://www.cocoachina.com/ios/20150526/11930.html" target="_blank">【查看原文】</a> 【2015-10-29 10:58:14 by beyond】<hr />【自编号:680】【XCode调试之chisel】<a target=_blank href="https://github.com/facebook/chisel" target="_blank">【进入网址】</a> 【2015-10-30 18:26:15 by beyond】<hr />【自编号:682】【apple官方LLDB简介】<a target=_blank href="https://developer.apple.com/library/mac/documentation/IDEs/Conceptual/gdb_to_lldb_transition_guide/document/lldb-command-examples.html#//apple_ref/doc/uid/TP40012917-CH3-SW5" target="_blank">【查看原文】</a> 【2015-11-02 16:21:09 by beyond】<hr />【自编号:683】【详情底部的footView死活不能接收点击事件】<pre name="code" class="objc">原因:详情底部的footView 上面盖了一层 透明的view, 该透明的view是:tabbar的父view 因此阻挡了事件传递【2015-11-03 11:27:53 by beyond】
【自编号:684】【提示attempt to insert nil,但是断不下来】
使用LLDB命令,在提示的方法上面,下内存断点 (LLDB) b -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]; 即可断下来,原来是:请求的dict中lastGetTime是从缓存中取的,第一次是nil【2015-11-03 17:02:47 by beyond】
【自编号:685】【因继承带来的unrecognized selector sent to instance】
===========问题描述:====================== BaseCtrl中有一个GlobalNetService(继承直BaseNet) 在GlobalNetService定义了请求方法 xxxRequest BeyondCtrl中有一个BeyondNetService(坑:继承自BaseNet) BeyondCtrl是BaseCtrl的子类 ============问题现象:===================== 当编译时:可以找到 GlobalNetService的方法xxxRequest 但是,当运行时,崩溃,提示找不到BeyondNetService的方法xxxRequest(本身也就没有) ============问题原因:===================== 因控制制的继承 成功地骗过了编译器: BaseCtrl的GlobalNetService发送消息给xxxRequest 但是真正运行时的self是子类(BeyondCtrl)的BeyondNetService发送消息给xxxRequest 因此,导致崩溃unrecognized selector sent to instance ============解决方法:===================== 让BeyondNetService 继承 GlobalNetService即可【2015-11-04 16:56:43 by beyond】
【自编号:697】【ASIdentifierManager】【查看原文】 【2015-11-07 19:08:48 by beyond】
【自编号:700】【IAP_的那些坑】【进入网址】
【点击观看】
【查看原文】 【2015-11-08 20:46:04 by beyond】
【自编号:703】【xib冲突报错:Line 507 :Extra content at the end of the document,最后找了一个正常的xib覆盖错的】【2015-11-10 16:09:18 by beyond】
【自编号:704】【从根控制器push到其他ctrl的时候,如果直接设置tabbar.hidden,会有问题:在其他控制器内:底部44的高度无法接收点击事件;原因是:底部44区域依然是tabbar控制器的,不属于当前的控制器,不知道对不对???】【2015-11-10 16:21:39 by beyond】
【自编号:706】【lipo详解+duplicate symbol】
http://blog.csdn.net/yqmfly/article/details/45148081 http://blog.sina.com.cn/s/blog_3e70804401019nzo.html http://www.cnblogs.com/wengzilin/p/3734751.html http://www.cnblogs.com/wengzilin/p/3800856.html 代码大全 apns 官方文档 https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html?spm=a3c0d.7662650.2.298.b8T9Pd【2015-11-16 17:17:11 by beyond】
【自编号:709】
</pre>【2015-11-16 17:18:56 by beyond】<hr />【自编号:718】【ronglianyun的IM Demo下载后,一直报错,结果是:Build Phase里面的链接库有红色的,解决方法:将红色删除,重新按文档添加相应的链接库即可】<a target=_blank href="http://www.yuntongxun.com/api/im/im_3_1#point_box" target="_blank">【查看原文】</a> 【2015-11-19 10:09:05 by beyond】<hr />【自编号:719】【困扰两天的ronglianyun_IM问题】<pre name="code" class="objc">登录的时候 由于调用了代码: [[ECDevice sharedInstance] SwitchServerEvn:YES]; 设置成了 沙盒环境 结果 导致: 发送语音的时候: 报错 消息发送回调失败 560004 解决方法: 因为5.1.7以后 全部改成生产环境,问题就解决了【2015-11-19 17:17:44 by beyond】
【自编号:736】【录音一直不成功】
录音之前加上这句就好了 [[AVAudioSession sharedInstance] setActive:YES error:nil]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 以下转载 这些天一直在纠结这个问题:在后台有音乐播放时,我用AVAudioRecorder进行录音,后台音乐被无情的停止了,直到最近才解决!解决方法如下: 首先,在开始录音之前,设置 [[AVAudioSession sharedInstance] setActive:YES error:nil]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 然后在录音结束后,既就是在它的回调函数 - (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)aRecorder successfully:(BOOL)flag 里加上:[[AVAudioSession sharedInstance] setActive:NO error:nil]; 即可。 (用AVAudioPlayer来播放音乐也同样处理) AVAudioSession的Active属性,既就是设置你的音频会话的启动与关闭 在你的录音结束后,一定要关闭AVAudioSession,后台音乐才会自己启动的。(网上的好多例子都只是启动它,但是并没有关闭,所以导致了AVAudioSession一直是激活状态,堵塞了后台音乐的正常播放) AVAudioSession的Category属性是设置其类别,它有一下几种类别: 获取输入硬 件 获取输出硬件 与IPOD混合 遵从振铃/静音 AVAudioSessionCategoryAmbient 否 是 是 是 AVAudioSessionCategorySoloAmbient 否 是 否 是 AVAudioSessionCategoryPlayback 否 是 否 否 AVAudioSessionCategoryRecord 是 否 否 否 AVAudioSessionCategoryPlayAndRecord 是 是 否 否 如果你想让你的音乐在程序退出后继续在后台播放, 可以这样设置: [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 再在你工程的plist里加上 在info.plist里面添加 Required background modes App plays audio【2015-11-29 11:55:39 by beyond】
【自编号:740】【字典的遍历】【查看原文】 【2015-12-02 18:29:43 by beyond】
【自编号:741】【Paros 抓包】【查看原文】
【软件介绍】 【2015-12-02 18:30:48 by beyond】
【自编号:742】【NSNotification与多线程】【查看原文】 【2015-12-03 16:14:17 by beyond】
【自编号:747】【iOS_切换扬声器状态】
if ([[[AVAudioSession sharedInstance] category] isEqualToString:AVAudioSessionCategoryPlayback]) { //切换为听筒播放 [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; [self showTipInfo:@"切换为听筒模式"]; } else { //切换为扬声器播放 [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; [self showTipInfo:@"切换为扬声器模式"]; }【2015-12-04 17:12:49 by beyond】
【自编号:755】【Xcode真机测试could not find developer disk image解决方法】
在使用Xcode进行真机调试的时候,有时根据真机的系统不同,会出现could not find developer disk image 错误,这是由于真机系统过高或者过低,Xcode中没有匹配的配置包文件,我们可以通过这个路径进入配置包的存放目录: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport 里面有类似这样的一些文件夹,如果这些文件夹中没有包含我们真机的系统,则不能进行真机测试。但是我们可以通过将相应的配置包添加入这个文件夹来解决问题:【查看原文】
【点击下载】 【2015-12-09 11:52:16 by beyond】
【自编号:760】【dyld: Library not loaded: Reason: image not found 解决办法】
在要使用的动态库的 工程的编译选项中,target--->Build Phases--->Embed Frameworks,手动添加要使用的framework【2015-12-09 18:16:57 by beyond】
【自编号:766】【一堆的错误...】
类似这种 "_sqlite3_bind_blob", referenced from: -[FMDatabase bindObject:toColumn:inStatement:] in FMDatabase.o -[ECFMDatabase bindObject:toColumn:inStatement:] in libCCPiPhoneSDK_IMLib.a(ECFMDatabase.o) 结果:一般是Targets-->Build Phases--->Link Binary With Libraries, 发现少了,或者一堆红色【2015-12-13 16:20:31 by beyond】
【自编号:769】【iOS隐藏tableview多余的分割线】
// iOS隐藏tableview多余的分割线 self.tableView.tableFooterView = [[UIView alloc] init];【2015-12-13 22:35:10 by beyond】
【自编号:770】【libxml 找不到的解决办法】
#import 找不到的解决办法 导入了libxml2.dylib,但是却提示libxml/HTMLparser.h file not found,那是因为你的开发环境默认的路径无法找到这个libxml2.dylib框架,修改方法: (两种方法都试一下吧) 第一种方法: 点击左边项目的根目录,再点击右边的Build Settings,手工输入文字:“Header search paths”,然后单击(或双击,点击弹出面板下面的“+”号进行添加)“Header search paths ”右边的空白处,输入:/usr/include/libxml2 如果还不行,试试这个方法: 点击左边项目的根目录,再点击右边的Build Settings,手工输入文字:“Header search paths”,然后单击(或双击,点击弹出面板下面的“+”号进行添加)“ Header search paths ”右边的空白处,输入:${SDK_DIR}/usr/include/libxml2【2015-12-14 14:30:43 by beyond】
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 网卡安装常见问题精解
- css网页布局中注意的几个问题小结
- 使用mysql中遇到的几个问题
- 装完linux以后需要注意的问题
- .net中前台javascript与后台c#函数相互调用问题
- SQLite字符串比较时的大小写问题解决方法
- PHP动态规划解决0-1背包问题实例分析
- jquery1.8版本使用ajax实现微信调用出现的问题分析及解决办法
- 搭建SSH时的思考和遇到的几个问题的解决方法
- 我认为JSP有问题(下)
- php猴子选大王问题解决方法
- JSP应用的安全问题
- 令PHP初学者头疼十四条问题大总结