机器猫工作笔记(持续更新中...)

1.如何手动停止CAKeyframeAnimation的动画

//暂停动画
-(void)pauseLayer:(CALayer*)layer
{
    CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
    layer.speed = 0.0;
    layer.timeOffset = pausedTime;
}
stopAnimation

2.有时候不能用无线去验证,把无线关掉就好

3.二维码扫描中扫描区域的大小设置

     CGRect intertRect = [previewLayer metadataOutputRectOfInterestForRect:rect];

     CGRect layerRect = [previewLayer rectForMetadataOutputRectOfInterest:intertRect];
//相互转换两种frame的相互转换(二维码有效区域frame是不一样的)
setRect

4.Xcode7.2找不到头文件

按照这个解决了http://stackoverflow.com/questions/10714600/cdvplugin-h-file-not-found-in-cordova-as-component-cleaver里面写着Forxcode7 add "$(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/include" to your Header Search Paths and set Enable Bitcode to No 我这里确实解决了,希望能帮到你们.

5.UIText中的String不能及时更新问题
只需要把String转换成可变字符串
 NSMutableString *newtxt = [NSMutableString stringWithString:textField.text];
    [newtxt replaceCharactersInRange:range withString:string];
View Code

6.头文件找不到问题

For xcode7 add "$(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/include" to your Header Search Paths and set Enable Bitcode to No

7.Tableview不识别touchesBegan方法

UITableView是不会响应touchesBegan:withEvent:之类的UIResponder的方法的。因此,加在其上的所有视图的响应者链就断了。如果在UITableView其上加任何的自身不具备类似UIButton一样有目标动作机制的UIView及其子类控件的时候,这个控件也不会响应touchesBegan:withEvent:方法。即便是设置该控件的userInteractionEnabled为YES也没用。

如此一来,如果想要这些控件具有交互性能怎么办?有一种很直观的方法,给这个控件加上手势识别器。

    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGesturedDetected:)]; // 手势类型随你喜欢。

    tapGesture.delegate = self;

    [yourView addGestureRecognizer:panGesture];
addAGesutreRecognizerForYourView
// do something
tapGesturedDetected:(UITapGestureRecognizer *)recognizer

8.tabBar角标(徽章应用)

[[self.tabBar.items objectAtIndex:1] setBadgeValue:@"10"];

// 向操作系统申请后台运行的资格,能维持多久,是不确定的

    UIBackgroundTaskIdentifier task = [application beginBackgroundTaskWithExpirationHandler:^{

    // 当申请的后台运行时间已经结束(过期),就会调用这个block

    // 过期则需要结束任务

    [application endBackgroundTask:task];
}];
applicationDidEnterBackground:(UIApplication *)application
8.SVN管理器错误总结
1.每次上传都需要更新.
2.用第三方的时候,.a文件需要手动添加
3.每次版本更新,描述不能写太长.
4.管理人每次上传都需要添加(add)版本更新文件(.git)
9.微信支付跳转,回不去应用如何解决
item0为商户的APPID
10.转UTF8
NSString *str = @"我擦";
NSString *body = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@",body);
View Code

11.字典转json格式字符串

    NSError *parseError = nil;

    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];

    return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
+ (NSString*)dictionaryToJson:(NSDictionary *)dic

12.CocoaPods中的头文件import导入时不能自动补齐的解决方法

选择工程的 Target -> Build Settings 菜单,找到\”User Header Search Paths\”设置项
    新增一个值"$(PODS_ROOT)",并且选择\”recursive\”,这样xcode就会在项目目录中递归搜索文件
13.报错:
pie can only be used when targeting iOS 4.2 or later
解决方法:点击工程project-》build setting --》搜索IPHONEOS_DEPLOYMENT_TARGET 修改为
14.ScollView中添加图片,并支持放大缩小的简单例子,类似相册功能,放大后滑到下一张再返回时图片变为原来的大小。
15.保存照片到本地

点击按钮,将self.imageView上面的image内容保存到本地相册,并指定判断保存成功与否的方法imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:

 UIImageWriteToSavedPhotosAlbum(self.imageView.image, self, @selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:), nil);
- (IBAction)saveImageToAlbum:(id)sender

实现imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:方法

NSString *message = @"呵呵";
    if (!error) {
        message = @"成功保存到相册";
    }else
    {
        message = [error description];
    }
    NSLog(@"message is %@",message);
- (void)imageSavedToPhotosAlbum:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo

16.Xcode 7.1上传

upload 需要新建一个”Payload”文件夹,在Payload文件夹中放.app文件压缩之后改为.ipa文件上传
直接achive不行7.1之后可以.
17.此证书的签发者无效Missing iOS Distribution signing identify 问题解决
需要更新AppleWWDRCA证书。
1.https://developer.apple.com/certificationauthority/AppleWWDRCA.cer下载最新AppleWWDRCA证书,双击安装。
2.打开钥匙串,选择登录,然后选择下面的证书。
3.选择桌面左上角的显示→显示已过期的证书。
4.这时候你会发现一个过期的“WWDR Certificate”(Apple Worldwide Developer Relations Certification Authority),删除它。
特别注意:有的在系统那一栏也有这个过期的“WWDR Certificate”,也一并删除它,没有就不作处理。
5.再回头点击Develop证书和Distribution证书,不出意外他们都变成“此证书有效”了。
18.SDWebImage的三级缓存,大量图片是否造成APP crash 

首先检查了SDWebImage代码中对于memory warning的处理:

[self.memCache removeAllObjects];
- (void)clearMemory
其中self.memCache是NSCache类型的,可以看到SDWebImage本身对内存警告执行了操作,但是并没有什么X用。
可以看到内存基本都在decodedImageWithImage:这个方法里被占用了
在使用SDWebImage加载较多图片造成内存警告时,定期调用
[[SDImageCache sharedImageCache] setValue:nil forKey:@"memCache"];

可解决。

19.- (void)willMoveToSuperview:(nullable UIView *)newSuperview;
- (void)willMoveToSuperview:(nullable UIView *)newSuperview;
这个方法是在移动到父视图之前调用的,一般是自定义的UIView的提示框,然后可以在这个方法里面初始化自定义提示框的子控件。这是我的理解
 
20.有关生命周期问题
直接在Didload里面直接show一个UIAlertController 会显示不出来.警告是 viewcontroll没有被加载
非常典型的一个生命周期问题,把show UIAlertController 这个操作放在ViewDidApear中,等待当前视图控制器加载完了之后再调用UIAlertController控制器,这样的话就可以调用了.
 
21.assign和weak的区别
assign是指针赋值,不对引用计数操作,使用之后如果没有置为nil,可能就会产生野指针;而weak一旦不进行使用后,永远不会使用了,就不会产生野指针
并且weak避免循环引用
22.金额格式
NSNumberFormatter *formatter = [[NSNumberFormatter alloc]init];

formatter.numberStyle =kCFNumberFormatterCurrencyStyle;

NSString *newAmount = [[formatter stringFromNumber:[NSNumber numberWithInt:[dic[@"amount"] intValue]]] substringFromIndex:1];
22.block块声明
__weak typeof(self) VC = self;

23.模态界面的直接返回父视图的根视图

self.presentingViewController.view.alpha = 0;
    [self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];

24.NSUserDefaults 存取

[[NSUserDefaults standardUserDefaults] setBool:@YESforKey:loginStr];
[[NSUserDefaults standardUserDefaults] synchronize];
NSUserDefaults *UD = [NSUserDefaults standardUserDefaults];
BOOL login = [UD objectForKey:loginStr];

25.配置path

library path--
$(SRCROOT)/  ***
framework path--
$(PROJECT_DIR)/***
$(inherited)

26.解决分割线缺失一段

    if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
        [self.tableView setSeparatorInset:UIEdgeInsetsZero];

    }
    if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)])  {
        [self.tableView setLayoutMargins:UIEdgeInsetsZero];
    }
-(void)viewDidLayoutSubviews
    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
        [cell setLayoutMargins:UIEdgeInsetsZero];
    }
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]){
        [cell setSeparatorInset:UIEdgeInsetsZero];
    }
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPat
27.SDWebImage
1.缓存策略默认是每次都请求
2.默认使用不缓存
3.如果使用缓存策略要配置NSUrlCache
 
28.审核相关联系信息
如果需要递交 App 审核或者联系 App 审核团队,可以使用以下链接用英文形式递交申请表格:
https://developer.apple.com/contact/app-store/
如果需要递交 App 加急审核的申请,可以使用以下链接用英文形式递交申请表格:
https://developer.apple.com/contact/app-store/?topic=expedite
办公时间是周一至周五,09:00-17:00,电话号码是4006 701 855。或是到以下网站查询各地区开发者电话号码
https://developer.apple.com/cn/contact/phone.php
 
29.在模态界面添加timer(原因:主线程,运行时Runloop机制问题,响应者链找不到当前视图控制器的Runloop,需要添加一个线程,把timer放在这个线程的RunLoop中,注意释放.在请求中添加timer会阻塞请求线程,整个APP线程会崩溃)
dispatch_async(dispatch_get_global_queue(0, 0), ^{


     NSTimer *t = [NSTimer scheduledTimerWithTimeInterval:1.0f
                                                                  target:self
                                                                selector:@selector(configureTimerr:)
                                                                userInfo:@{@"strTime":strTime,@"endTime":endTime}

                                                                 repeats:YES];
     [[NSRunLoop currentRunLoop] addTimer:t forMode:NSDefaultRunLoopMode];
     [[NSRunLoop currentRunLoop] run];
});

30.init里边初始controller.注册通知.通知无效(通知的结果操作view,还没调用load view,view为nil)

31.防止用户多次点击按钮弹窗重复

 

@synchronized(self){
      if (self.view.userInteractionEnabled == NO)
      return;
    }
    self.view.userInteractionEnabled = NO; //防止用户多次点击按钮弹窗重复

 

32.使用assign赋值给指针崩溃,改为weak后正常
weak和assign区别:weak会把已经注销的对象指针指向nil,assign不会。最后结局就是向已经释放的对象发消息,然后就crash了。
 
33.performSeletor...afterDelay在子线程不能使用
performSeletor...afterDelay这个函数一定要在主线程用,在子线程使用不延迟,手动制定一个runloop行不行可以尝试。
 
34.dispatch_once
static dispatch_once_t predicate; dispatch_once(&predicate, ^{
      sharedAccountManagerInstance = [self alloc] init];
     });

35.判断是否有自定义键盘,自定义键盘和第三方键盘的class不一样

NSArray *array = [UITextInputMode activeInputModes];//获取键盘类型个数

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0) {
     //系统大于9.0的时候,在系统键盘上多了一层layer层可修改
     temp = [[[UIApplication sharedApplication] windows] objectAtIndex:2];
}else {
     //系统不大于9.0时候,在系统键盘上没有那一层
     temp = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
}
[temp addSubview:_dianBT];
36.判断在一段文字中是否包含”FGM"
[[metadataobj stringValue] rangeOfString:@"FGM"].location !=NSNotFound

37. [UIScreen mainScreen].bounds.size.width值不改变问题

在LaunchImage中必须有Default.pngDefault-568h.png文件,如果iOS 检测不到这两个文件就不会根据屏幕尺寸适配

38.解决在tableview和collection view中的手势冲突问题

 

    DLog(@"1");
    if ([touch.view isKindOfClass:[UITextField class]])
    {
        return NO;
    }
    // 若为UITableViewCellContentView(即点击了tableViewCell),则不截获Touch事件
    if ([NSStringFromClass([touch.view class])isEqualToString:@"UITableViewCellContentView"]) {
        return YES;
    }
    return YES;
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

 

39.版本控制示例

 

#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_9_0
- (NSUInteger)supportedInterfaceOrientations
#else
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
#endif
{
    return UIInterfaceOrientationMaskLandscape;
}

40.搜索关键词高亮

//搜索关键字高亮
NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:model.name];
NSRange range = [model.name rangeOfString:_mySearch.text];
[attr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:range];
cell.titleLabel.attributedText = attr;
41.百度地图-雷达搜索坑点
坑点:
1.第一次检索的时候是以当前用户的位置为中心进行检索(默认)
2.上传第一次的位置信息是检索不出来的,因为是以最后上传的位置为中心检索
3.第二次上传信息之后,可以检索到第一次上传的信息,因为是以第二次上传的位置为中心进行检索,可以检索到第一次的位置信息,但是返回的数组中没有当前上传的信息.
总结:总归当前上传的是查不出来的,因为是默认为中心点的.不上传的话是默认为当前位置
4.百度官方中Demo设置雷达的时候,中心点的坐标获取是一个监听,要是用户不移动的话获取不到用户位置,也就获取不到数据(BUG)
5.百度周边雷达上传自己位置的时候,上传的备注信息中不能有”/“符号(可能还有其他限制,暂时就知道不能上传”/“),倒是可以上传”-"这个符号
 
艹艹艹   这段代码!!!! 
[_mapview showAnnotations:@[_annotation] animated:NO];

会自动把视角移动到这几个标记点上.坑

 

以下几个是比较常用的几个点:

//当前屏幕中心点的经纬度

CGFloat centerLongitude = self.mapView.region.center.longitude;

CGFloat centerLatitude = self.mapView.region.center.latitude;

//当前屏幕显示范围的经纬度

CLLocationDegrees pointssLongitudeDelta = self.mapView.region.span.longitudeDelta; CLLocationDegrees pointssLatitudeDelta = self.mapView.region.span.latitudeDelta;

//左上角

CGFloat leftUpLong = centerLongitude - pointssLongitudeDelta/2.0;

CGFloat leftUpLati = centerLatitude - pointssLatitudeDelta/2.0;

//右上角

CGFloat rightUpLong = centerLongitude + pointssLongitudeDelta/2.0;

CGFloat rightUpLati = centerLatitude - pointssLatitudeDelta/2.0;

//左下角

CGFloat leftDownLong = centerLongitude - pointssLongitudeDelta/2.0;

CGFloat leftDownlati = centerLatitude + pointssLatitudeDelta/2.0;

//右下角

CGFloat rightDownLong = centerLongitude + pointssLongitudeDelta/2.0;

CGFloat rightDownLati = centerLatitude + pointssLatitudeDelta/2.0;

NSLog(@"\n 左上 %f,%f---------\n 右上 %f,%f-------\n 左下 %f,%f----- \n 右下 %f,%f",leftUpLong,leftUpLati,rightUpLong,rightUpLati,leftDownLong,leftDownlati,rightDownLong,rightDownLati);

 

持续更新中....有错误的地方请大神指教,不胜感激.

posted @ 2016-11-16 16:52  IT_JQm  阅读(845)  评论(0编辑  收藏  举报