大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.

如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)


首先推荐大家看这本书,整本书逻辑非常清晰,代码如何从无到有,到丰满说的很有条理.

说实话本书到目前为止错误还是极少的,不过人无完人,在第14章前半部分项目的代码中,作者在MasterVC到DetailVC中又直接添加了一个segue,该segue的ID为”masterToDetail”,作用是当新建一个tinyPix文档时可以直接跳转到DetailVC来编辑文档.

作者同样意识到如果直接从MasterVC的表视图cell直接转到DetailVC时也需要做一些额外的操作,该操作的作用是,当用户点击已存在的tinyPix时跳转到DetailVC中打开已存在的文档.

作者是这样修改prepareForSegue::方法的:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if (sender == self) {
        UIViewController *destination = segue.destinationViewController;
        if ([destination respondsToSelector:@selector(setDetailItem:)]) {
            [destination setValue:_chosenDoc forKey:@"detailItem"];
        }
    }else{
        NSIndexPath *indexPath = self.tableView.indexPathForSelectedRow;
        NSString *filename = _docFilenames[indexPath.row];
        NSURL *docUrl = [self urlForFilename:filename];
        _chosenDoc = [[HyTinyPixDocument alloc]initWithFileURL:docUrl];
        [_chosenDoc openWithCompletionHandler:^(BOOL success){
            if (success) {
                UIViewController *destination = segue.destinationViewController;
                if ([destination respondsToSelector:@selector(setDetailItem:)]) {
                    [destination setValue:_chosenDoc forKey:@"detailItem"];
                }
            }else{
                NSLog(@"failed to load!");
            }
        }];
    }
}

但是实际执行App时发现点击已存在的tinyPix文件并不能正确在DetailVC中显示文档的内容.在上述方法的else分支后下断点,发现由TableViewCell跳转而来的代码其segue.destinationViewController并不是我们希望的DetailViewController,而是UINavigationController.而后者自然不存在神马setDetailItem:方法.

我不知道这是作者的笔误还是什么其他原因,或者是新版的Xcode中Master-Detail Application模板发生了变化?但至少在Xcode7.2中情况是这样.

那么如何修复这个问题呢?其实比你想象的要简单,修改如下:

if (success) {
                //UIViewController *destination = segue.destinationViewController;
                DetailViewController *detailVC = (DetailViewController*)[
                                        segue.destinationViewController topViewController];
                if ([detailVC respondsToSelector:@selector(setDetailItem:)]) {
                    [detailVC setValue:_chosenDoc forKey:@"detailItem"];
                }
            }else{
                NSLog(@"failed to load!");
            }

在这里我们需要的是destinationVC的topViewController对象,而不是destinationVC本身.

编译连接App,现在两种方法进入到DetailVC都表现正常了:

<<精通iOS开发>>第14章例子代码小缺陷的修复的更多相关文章

  1. <<精通iOS开发>>第14章例子代码彻底清除警告

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上一篇我们解决了<<精通iOS开发>> ...

  2. 精通iOS开发(第5版)

    <精通iOS开发(第5版)> 基本信息 原书名:Beginning ios 6 development:exploring the ios sdk 作者: (美)David Mark   ...

  3. 【转】 学习ios(必看经典)牛人40天精通iOS开发的学习方法【2015.12.2

    原文网址:http://bbs.51cto.com/thread-1099956-1.html 亲爱的学员们: 如今,各路开发者为淘一桶金也纷纷转入iOS开发的行列.你心动了吗?想要行动吗?知道如何做 ...

  4. 学习ios(必看经典)牛人40天精通iOS开发的学习方法

    学习ios(必看经典)牛人40天精通iOS开发的学习方法 描述 这是一套从一个对iOS开发感兴趣的学员到iOS开发高手的系统.专业的课程体系.以培养企业开发真正需要的人才为目标,每个知识点都用案例来讲 ...

  5. ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

    本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布 ...

  6. 盘点国内程序员不常用的热门iOS第三方库:看完,还敢自称”精通iOS开发”吗?【转载】

    综合github上各个项目的关注度与具体使用情况,涵盖功能,UI,数据库,自动化测试,编程工具等类型,看完,还敢自称”精通iOS开发”吗? https://github.com/syedhali/EZ ...

  7. iOS开发 swift 3dTouch实现 附代码

    iOS开发 swift 3dTouch实现 附代码 一.What? 从iphone6s开始,苹果手机加入了3d touch技术,最简单的理解就是可以读取用户的点击屏幕力度大小,根据力度大小给予不同的反 ...

  8. IOS开发 arc与非Arc代码的区别

    是属于ios开发中的内存管理问题:在这我简要概述一下,详细讲的话内容挺多,而且是作为一个ios开发人员,或ios开发爱好者,这是必须了解的:Objective-c中提供了两种内存管理机制MRC(Man ...

  9. IOS开发退出应用程序的代码

    IOS 开发中.我知道的两个退出程序的方法: 1. exit(0); 2. if([[UIApplication sharedApplication] respondsToSelector:@sele ...

随机推荐

  1. [Russian Code Cup 2017 - Finals [Unofficial Mirror]]简要题解

    来自FallDream的博客,未经允许,请勿转载,谢谢. Div1难度+ACM赛制  和几个大佬组队逛了逛 A.给一个大小为n的集合ai(1<=ai<=1000000),要求你构造一个大小 ...

  2. IDF实验室-CTF训练营-牛刀小试CTF

    自从开始玩CTF后,发现这个游戏还是比较有意思,发现了一个练习场地IDF实验室:http://ctf.idf.cn/ 刷刷里面的题目,今天完成了其中的牛刀小试,分享一下解题思路: 1. 被改错的密码 ...

  3. node之querystring模块

    前言 querystring 模块提供了一些实用工具,用于解析与格式化 URL 查询字符串. 一.querystring.parse() 用于将一个查询字符串解析为JS 对象. const query ...

  4. Python小代码_1_九九乘法表

    Python小代码_1_九九乘法表 max_num = 9 row = 1 while row <= max_num: col = 1 while col <= row: print(st ...

  5. The specified JRE installation does not exist异常的原因和解决办法

    今天,回首为了学习新框架,于是将JDK的版本从1.7开发标配版换成了1.8,一切前期很顺利,完成了新框架的测试和体验,但在运行原有项目的时候问题出现了,爆出了The specified JRE ins ...

  6. 使用CSS让多出来的字变为省略号

    <style> .text1 { width:200px; overflow:hidden; text-overflow:ellipsis; -o-text-overflow:ellips ...

  7. hive升级遇到的几个小问题

    1.hiveserver2正常启动,但是beeline连不上服务. 我的服务是开在本机的,但是用主机名和127好像都不能访问服务了 jdbc:hive2://172.19.1.11:10000> ...

  8. 打印n阶菱形

    #打印n阶菱形 def print_rhombus(n): #打印正三角 for i in range(1,n+1): x_num = 2*i-1 #每一层的*数量 space_num = n - i ...

  9. 剑指架构师系列-MySQL常用SQL语句

    (1)分清HAVING与WHERE的区别: HAVING 子句使你能够指定过滤条件,从而控制查询结果中哪些组可以出现在最终结果里面.WHERE 子句对被选择的列施加条件,而 HAVING 子句则对 G ...

  10. Jmeter(二十)_Mock接口

    首先解释一下什么是mock接口. Mock通常是指,在测试一个对象时,我们构造一些假的对象来模拟与其交互.而这些Mock对象的行为是我们事先设定且符合预期.通过这些Mock对象来测试对象在正常逻辑,异 ...