ios开发鸡肋之莫名奇妙的错误

 
 

1.手动添加了一个按钮响应,结果报错:unrecognized selector sent to instance 

一种是这个button是否被release了。。还有一种比较坑爹的原因是:

[aboutBtnaddTarget:selfaction:@selector(aboutUs:) forControlEvents:UIControlEventTouchDown];

请注意这个红色的冒号!!一般响应函数都是带一个sender参数的!!!

2.关于xib之间用presentViewController跳来跳去的一些问题

一般的来说,再一个viewController的按钮响应神马中使用[self presentViewController:_imgCropperViewController animated:YES completion:nil];来跳到其他页面是正常的,但有个别情况是要注意滴!

一种是需要再相册选完图片后跳转,在- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info函数中跳转可能会报一下警告,然后跳转神马的根本都没出现:

Warning:Attemptto present <finishViewController:0x1e56e0a0>on <ViewController:0x1ec3e000>whose view isnotinthe window hierarchy!

给个解决代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- ( void )imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
      
      
     UIImage *originalImage = [info valueForKey:UIImagePickerControllerOriginalImage];
     [picker dismissModalViewControllerAnimated:NO];
  
    photoCropViewController *cropController = [[photoCropViewController alloc] init];
    
     cropController.photoCropImage = originalImage;
  
     [self presentViewController:cropController animated:YES completion:nil];
     [cropController release];
  
}

这里要注意的是[picker dismissModalViewControllerAnimated:NO];这行代码,表示先隐藏相册选取界面,特别是这个NO,貌似不能两个页面显示和dismiss操作同时为YES

还有一种是如果在一个viewController类的viewDidLoad函数里做跳转也是会报一个警告然后神马都没出现:

Warning:Attemptto present <ChecklistsViewController:0x10525e90>on <UINavigationController:0x9648270>whilea presentation is in progress!

这种情况只要把这个跳转语句放到viewDidAppear函数里就好了




  
  

  
  

  
  

  
  
   
   
1.模态切换过渡有几种类型 
  ①. cover vertical从下向上移动,覆盖旧scene 
  ②. flip horizontal 水平翻转 
  ③. cross dissolve 淡入淡出 
  ④. partial curl 翻书切换 

2.scene之间数据获取 
   在原视图控制器中实现方法
  1.   -(void) prepareForSegue: (UIStoryboardSegue *)segue sender: (id)sender
复制代码
在该方法内可以获取原控制器里面的属性,还可以获取目标控制器里面的属性,如:
  1. ViewController *startView = (ViewController*)segue.sourceViewController;
  2. DestinationViewController *desView = (DestinationViewController*)segue.destinationViewController;

  3. 简单方式可以如下:
  4. ViewController *startView = (ViewController*)self.presentingViewController;
  5. DestinationViewController *desView = (DestinationViewController*)self.presentedViewController;
复制代码

关闭模态场景:

在上一篇有个问题,那就是无法返回到上一个场景。使用UIViewController的方法dismissViewControllerAnimated:completion实现,可以在显示模态场景的视图控制器中调用这个方法,也可以在模态场景的视图控制器中调用它:

?
1
[self dismissViewControllerAnimated:YES completion:nil];

参数completion是一个可选参数,用于指定过渡完毕后将执行的代码块。

另外,在目标视图控制器中,可以使用self.presentingViewController获取源视图控制器;同样在源视图控制器中,可以使用self.presentedViewController获取目标视图控制器。

例如:

?
1
2
//在目标视图控制器访问源视图控制器的属性
((ViewController *)self.presentingViewController).<property>
?
1
2
//在源视图控制器访问目标视图控制器的属性
((ViewController *)self.presentedViewController).<property>

其中的括号和类名是必不可少的,目的是将属性强制转换为正确的对象类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值