一些小问题的记录

2018-12-28  本文已影响0人  橙子哥丶

- (void)viewWillLayoutSubviews {

//为什么要在这里调用一次alert 是因为 presentViewController 方法必须在页面加载完成之后才会加载 否则会报错不能弹出 因为xib的viewDidLoad的时候并未加载完成

//Warning: Attempt to present  on  whose view is not in the window hierarchy!

//记录一下知识点 xib的生命周期与storyboard、纯代码 是不一样的 在vc生命周期的方法中打印vc的view尺寸的变化,可以看到viewDidLoad到viewWillAppear:中view的size都是xib的大小,到viewDidAppear的方法中才将view的大小按照模拟器的屏幕尺寸改回来  但是将布局代码放在viewDidAppear中也不好  所以可以在这个方法中进行布局 这个方法类似UIView的layoutSubviews  控制器加载完view后会再调用

//viewDidLoad、viewWillAppear、viewWillLayoutSubviews、viewDidLayoutSubviews、viewDidAppear 分别打印出self.view.frame 查看 可以明确的看到 viewDidLoad、viewWillAppear中加载的 frame是xib中的frame 到viewWillLayoutSubviews开始 加载的是 屏幕尺寸的frame

//所以针对当前的这个需求 可以理解为 在viewDidLoad的时候 虽然viewDidLoad方法已经执行了 但是xib文件还没有加载完成 到viewWillLayoutSubviews方法 xib加载完成 这时候presentViewController就可以执行了    纯代码布局的vc中不会出现这个问题

Reachability *curReach = [Reachability reachabilityWithHostName:@"www.apple.com"];

if ([curReach currentReachabilityStatus] == NotReachable) {

[self showNoNetworkAlert];

}

}

- (void) showNoNetworkAlert {

UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"啦啦啦啦啦啦" preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"重试" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

[self validateAndDownloadClientPack];

}];

[alertController addAction:okAction];

[self presentViewController:alertController animated:YES completion:nil];

}

源码在 DBBMoBo中 DBBLaunchViewController.m


连上手机,选择windows-》devices,选中设备,在右边选择你的APP,下方的设置按钮有download container

然后下载文件,显示包内容,即是沙盒内的文件。


在真机上, 不能move bundle中的文件到document目录下 ,但是 copy 可以, 可以copy bundle中的文件到 document。


WKWebview不支持 NSURLProtocol  ,添加了一个类 : NSURLProtocol+WebKitSupport  使用了私有API    github上有

WKWebview 禁止缩放

self.wkWebView.scrollView.delegate = self;

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {

    return nil;

}


NSString* errResponse = [[NSString alloc] initWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] encoding:NSUTF8StringEncoding];

                      NSLog(@"%@",errResponse);


    (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view from its nib.

    //重点 设置frame时需要这样设置,如果直接设置self.view.frame 时是无法自适应屏幕的

    WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectMake(0,

    0,

    ISScreen_Width,

    ISScreen_Height)];

    NSURL * webURL = [NSURL URLWithString:self.needOpenURL];

    NSURLRequest * webRequest = [NSURLRequest requestWithURL:webURL];

    [webView loadRequest:webRequest];

    [self.view addSubview:webView];

//滑动返回看这里

webView.allowsBackForwardNavigationGestures = NO;

//重点(当然需要遵守协议,不然会有警告)(当然遵守了这个你就可以侧滑返回上个页面了)

webView.navigationDelegate = self;

}


使用个人开发者账号 真机调试的时候 报错 说

Set the provisioning profile value to "Automatic" in the build settings editor,

意思说 provisioning profile的设置不正确 应该设置成Automatic

可是设置成了 Automatic 还是不行 报一样的 错

问题在于 在Build Setting中的User-Defined中 有一个

PROVISIONING_PROFILE  注意是 大写的 把这个中的设置 全部清空就可以了


抽屉的效果 侧边栏加拖动手势 最左侧 在屏幕外加一个tableview

拖动的时候 加上动画效果 让左侧的tableview改变frame 让原本页面的tableview也改变frame 从右边滑出去 然后可以在拖动的时候 给原本的tableview加一个渐变色的灰色图层 到滑动到停止后 灰色图层上添加一个单击手势 点击 就再用动画 弹回去 如果添加外部的按钮控制 也是一样 在动画中 添加两个改变frame 和 添加渐变色图层的方法 动画完成 添加单击手势  简单


General里Display Name改了之后 需要卸载安装才生效

InfoPlist.strings里的CFBundleDisplayName改了以后 即时生效


在集合类对象中,对 immutable 对象进行 copy,是指针复制, mutableCopy 是内容复制;对 mutable 对象进行 copy 和 mutableCopy 都是内容复制。但是:集合对象的内容复制仅限于对象本身,对象元素仍然是指针复制。用代码简单表示如下:

[immutableObject copy] // 浅复制

[immutableObject mutableCopy] //单层深复制

[mutableObject copy] //单层深复制

[mutableObject mutableCopy] //单层深复制

就是说,对可变类型来说,无论copy还是mutableCopy,都是进行深复制也就是内容复制,那么例子里面

self.array = [mutableArray copy];  是深复制,复制了内容,开辟新内存

self.array = mutableArray;            是浅复制,只复制指针,不占用新内存

上一篇下一篇

猜你喜欢

热点阅读