工作问题随笔

第一篇在上的文章,以前都是写在博客上,但是也得跟上时代的步伐不是..虽然有点晚   -.-

1.在searchBar上的UIText中字符串不能及时获取问题,只需要把获取的string转换成可变字符串就可以

NSMutableString*newtxt = [NSMutableStringstringWithString:textField.text];

[newtxtreplaceCharactersInRange:rangewithString:string];

2.Tableview不识别touchesBegan方法

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

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

- (void)addAGesutreRecognizerForYourView

{

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

tapGesture.delegate = self;[yourView addGestureRecognizer:panGesture];

}

- (void)tapGesturedDetected:(UITapGestureRecognizer *)recognizer

{

// do something

}

3.SDWebImage的三级缓存,大量图片是否造成APP crash

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

- (void)clearMemory {

[self.memCache removeAllObjects];

}

其中self.memCache是NSCache类型的,可以看到SDWebImage本身对内存警告执行了操作,但是并没有什么X用。

可以看到内存基本都在decodedImageWithImage:这个方法里被占用了

在使用SDWebImage加载较多图片造成内存警告时,定期调用

[[SDImageCache sharedImageCache] setValue:nil forKey:@"memCache"];

可解决。

4.Didload里面直接show一个UIAlertController 会显示不出来

刚步入iOS开发会遇到这个问题,警告是 viewcontroll没有被加载

非常典型的一个生命周期问题,把show UIAlertController 这个操作放在ViewDidApear中,等待当前视图控制器加载完了之后再调用UIAlertController控制器,这样的话就可以调用了.

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

self.presentingViewController.view.alpha=0;

[self.presentingViewController.presentingViewControllerdismissViewControllerAnimated:YEScompletion:nil];

6.解决cell分割线缺失一段

-(void)viewDidLayoutSubviews {

if([self.tableViewrespondsToSelector:@selector(setSeparatorInset:)]) {

[self.tableViewsetSeparatorInset:UIEdgeInsetsZero];

}

if([self.tableViewrespondsToSelector:@selector(setLayoutMargins:)])  {

[self.tableViewsetLayoutMargins:UIEdgeInsetsZero];

}

}

-(void)tableView:(UITableView*)tableView willDisplayCell:(UITableViewCell*)cell forRowAtIndexPath:(NSIndexPath*)indexPat{

if([cellrespondsToSelector:@selector(setLayoutMargins:)]) {

[cellsetLayoutMargins:UIEdgeInsetsZero];

}

if([cellrespondsToSelector:@selector(setSeparatorInset:)]){

[cellsetSeparatorInset:UIEdgeInsetsZero];

}

7.在模态界面添加timer

主线程,运行时Runloop机制问题,响应者链找不到当前视图控制器的Runloop,需要添加一个线程,把timer放在这个线程的RunLoop中,注意释放.在请求中添加timer会阻塞请求线程,整个APP线程会崩溃

dispatch_async(dispatch_get_global_queue(0,0), ^{

NSTimer*t = [NSTimerscheduledTimerWithTimeInterval:1.0f

target:self

selector:@selector(configureTimerr:)

userInfo:@{@"strTime":strTime,@"endTime":endTime}

repeats:YES];

[[NSRunLoopcurrentRunLoop]addTimer:tforMode:NSDefaultRunLoopMode];

[[NSRunLoopcurrentRunLoop]run];

});

8.init里边初始controller.注册通知.通知无效

通知的结果操作view,还没调用load view,view为nil

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

@synchronized(self){

if (self.view.userInteractionEnabled == NO)

return;

}

self.view.userInteractionEnabled = NO; //防止用户多次点击按钮弹窗重复

10.performSeletor...afterDelay在子线程不能使用

performSeletor...afterDelay这个函数一定要在主线程用,在子线程使用不延迟

11.判断是否有自定义键盘

自定义键盘和第三方键盘的class不一样

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

if([[[UIDevicecurrentDevice]systemVersion]floatValue] >=9.0) {

//系统大于9.0的时候,在系统键盘上多了一层layer层可修改

temp = [[[UIApplicationsharedApplication]windows]objectAtIndex:2];

}else{

//系统不大于9.0时候,在系统键盘上没有那一层

temp = [[[UIApplicationsharedApplication]windows]objectAtIndex:1];

}

[tempaddSubview:_dianBT];

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

工作问题随笔_第1张图片

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

13.tableview和collection view中的手势冲突问题

//- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{

//    DLog(@"1");

//    if ([touch.view isKindOfClass:[UITextField class]])

//    {

//        return NO;

//    }

//    //若为UITableViewCellContentView(即点击了tableViewCell),则不截获Touch事件

//    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {

//        return YES;

//    }

//    return YES;

//}

14.百度地图-雷达搜索坑点

(1) 第一次检索的时候是以当前用户的位置为中心进行检索(默认)

(2) 上传第一次的位置信息是检索不出来的,因为是以最后上传的位置为中心检索

(3) 第二次上传信息之后,可以检索到第一次上传的信息,因为是以第二次上传的位置为中心进行检索,可以检索到第一次的位置信息,但是返回的数组中没有当前上传的信息.

总结:总归当前上传的是查不出来的,因为是默认为中心点的.不上传的话是默认为当前位置

(4) 百度官方中Demo设置雷达的时候,中心点的坐标获取是一个监听,要是用户不移动的话获取不到用户位置,也就获取不到数据(BUG)

(5) 百度周边雷达上传自己位置的时候,上传的备注信息中不能有”/“符号(可能还有其他限制,暂时就知道不能上传”/“),倒是可以上传”-"这个符号

这段代码!!!!

[_mapview showAnnotations:@[_annotation] animated:NO];

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

15.push几种跳转问题(个人认为比较不容易出问题的方式)

(1)     [self.tabBarController.tabBarsetTranslucent:NO];  (在用storyboard时隐藏tabbar)

(2)     yourVC.hidesBottomBarWhenPushed=YES;(在用XIB时隐藏tabbar)

(3)     self.hidesBottomBarWhenPushed=YES;(没有XIB时隐藏tabbar)

16.获取父视图控制器

- (UIViewController*)viewController

{

for(UIView* next = [selfsuperview]; next; next = next.superview) {

UIResponder*nextResponder = [nextnextResponder];

if([nextResponderisKindOfClass:[UIViewControllerclass]]) {

return(UIViewController*)nextResponder;

}

}

returnnil;

}

你可能感兴趣的:(工作问题随笔)