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

如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! 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. 【bzoj4568 scoi2016】幸运数字

    题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的象征. 一些旅行者希望 ...

  2. spoj 1676 AC自动机+矩阵快速

    Text Generator Time Limit: 1386MS   Memory Limit: 1572864KB   64bit IO Format: %lld & %llu Submi ...

  3. 【网络流问题·我就想建好模】

    ·为了有助于你读后文,在写题前先列出一些大米饼的代码习惯: 一个提醒:所有的ADD函数无特殊说明均如图:(没有w就直接跳过) 以及: go(i,a,b)=====for(int i=a;i<=b ...

  4. [bzoj4245][ONTAK2015]OR-XOR

    来自FallDream的博客,未经允许,请勿转载,谢谢. 给定一个长度为n的序列a[1],a[2],...,a[n],请将它划分为m段连续的区间,设第i段的费用c[i]为该段内所有数字的异或和,则总费 ...

  5. python2.7入门---简介&基础语法

    Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言,具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构.基于上述原因, ...

  6. Arduino抢答器

    0.部分需要掌握的知识点和注意事项 (1)面包板的结构 (2)按键的结构:按键按下时,左右两侧连通:按键松开后,左右两侧断开,但1号与2号相连,3号与4号相连,即按键松开时,同侧不相连,相连不同侧. ...

  7. Ajax来实现下拉框省市区三级联动效果(服务端基于express)

    //服务端JS代码: //提供服务端的处理 const express = require('express'); const fs = require('fs'); const app = expr ...

  8. vue-cli中配置sass

    第一步, npm install node-sass --save-dev npm install sass-loader --save-dev 第二部,打开webpack.base.config.j ...

  9. Android项目实战(四十五):Usb转串口通讯(CH34xUARTDriver)

    需求为:手机usb接口插入一个硬件,从硬件上获取数据 例如:手机usb插入硬件A,A通过蓝牙通讯获取设备a.b的数据,作为中转站(可以做些数据处理)将数据(设备a.b产生的)传给手机程序. 设备A也可 ...

  10. python笔记十五(面向对象及其特性)

    一.面向对象: class(类):一类拥有共同属性对象的抽象:定义了这些对象的属性和方法object(对象):是一个类实例化后的实例,类必须经过实例化才可以在程序中调用: 由于之前学习过java,对类 ...