【问题标题】:Winter 2015 / Lecture 10 - Broken Twitter Package2015 年冬季 / 第 10 讲 - 破碎的 Twitter 包
【发布时间】:2015-04-18 14:55:03
【问题描述】:

一边观看 Lecture 10 iTunes 视频,一边尝试跟随并编写 Smashtag 项目的代码。

当我将下载的 Twitter 包添加到我的 Smashtag 项目时,当我在 TweetTableViewController 中引用它时,XCode 找不到 Tweet 类。

由于上面描述的问题,我将属于 Twitter 包的四个类分别添加到项目中。 XCode 找到了这四个类,但以这种方式添加它们会产生 11 个编译错误。

我使用的是 iOS 8.3 之后的 XCode 版本 6.3 (6D570)。

还有其他人遇到过这个问题吗?

感谢您阅读我的问题。 〜李

【问题讨论】:

    标签: cs193p


    【解决方案1】:

    这可能不是最正确(阅读:最佳实践)的方法,但我将把它归结为完成课程所需的一切。

    我刚刚浏览了编译错误列表并将相关属性更改为var 而不是letConstants 无法更改,在新版本的Swift 中,它们只能实例化一次。所以为了不重写太多代码,我选择将某些属性设为vars 而不是lets。

    我在 iTunes U 课程后发现的其他错误:

    • 命名的“处理程序:”参数在一些地方需要明确的名称。
    • 模拟器将显示“TwitterRequest:无法发现 Twitter 帐户类型。”直到您转到设置(在模拟器中)并设置 Twitter 帐户。此时我必须重新启动设备,因为调用是在 ViewDidLoad 中进行的,因此仅在第一次加载视图时调用。(或者,您可以从模拟器中的应用切换器中关闭该应用,然后以这种方式重新启动。)

    这是一个带有更正代码的要点,您可以将其用作 Twitter 包,该包将与课程一起使用,并修复了上述错误,减去 Twitter 帐户设置:

    https://gist.github.com/mattpetters/ccf87678ccce0c354398

    【讨论】:

    • mpetts,非常感谢您分享您的代码。由于您的慷慨,我能够按照第 10 讲完成。一切正常!
    • 我和其他参加 2015 年冬季版 iTunes 课程的人欠你一份感激之情!
    • 没问题!不得不自己解决它并遇到同样的困境。祝你学习顺利!
    • 感谢您在“设置”应用中设置 Twitter 帐户的提示。现在我收到错误消息:“TwitterRequest:Twitter 没有响应。”这是一个访问错误,在plist中我必须设置NSAppTransportSecurity并允许twitter.com和图片来自另一个资源,需要单独解锁。
    【解决方案2】:

    正如 Christian R. Jimenez 所说,“我在模拟 iPhone 的设置中添加了我的 Twitter 帐户。一切都很完美。”在http://cs193p.m2m.at/cs193p-lecture-10-table-view-winter-2015/。我刚刚添加了我的 Twitter 帐户并对其进行了测试,它有效!

    【讨论】:

      【解决方案3】:

      我在使用 Swift 2.0 和 Xcode 7.2 的 Twitter 包中遇到了类似的问题

      我对 Swift 很陌生,所以我所做的更改很可能不是最佳实践,但更新后的文件确实工作https://gist.github.com/awaxman11/9c48c0b4c622bffb879f

      在大多数情况下,我使用了 Xcode 的建议更改。我所做的两个较大的更改是:

      1. 在 Tweet.swift 中,我更新了 IndexedKeyword 结构的 init 方法以使用 advanceBy() 而不是 advance()
      2. 在 TwitterRequest.swift 中,我更新了 NSJSONSerialization 的签名以符合新的错误处理系统

      【讨论】:

        【解决方案4】:

        我刚刚参加了一个大型会议,为同一版本的 Xcode 修复 Twitter 包文件。

        似乎破坏的是在这个版本的 Swift 中,常量 ('let x...') 可能只能被初始化一次,所以如果在声明中给常量一个值 ('let x = false '),它可能不会在 init() 函数中更改。 Twitter 包提供了一些常量初始值,但随后会更改 init() 函数中的值。

        我对此的解决方案是遵循当前版本的 Apple Swift 语言书中建议的样式:将(许多)常量声明为隐式解包的可选项,在 init() 函数中无条件地为它们赋值(其中value 可能是 nil),然后测试它们中的任何一个是否为 nil,如果是,则从 init() 返回 nil。

        查看https://developer.apple.com/library/mac/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html,点击“On This Page”并选择“Failable Initializers”

        另外,在 TwitterRequest.swift 中,我需要在执行 TwitterRequest(request, handler: handler) 的几个调用中添加参数名称“handler:”。

        作为常量初始化的例子,在 MediaItem.swift 中:

        >

        ...
            public let aspectRatio: Double = 0
        ...
            init?(data: NSDictionary?) {
                var valid = false
                if let urlString = data?.valueForKeyPath(TwitterKey.MediaURL) as? NSString {
                    if let url = NSURL(string: urlString) {
                        self.url = url
                        let h = data?.valueForKeyPath(TwitterKey.Height) as? NSNumber
                        let w = data?.valueForKeyPath(TwitterKey.Width) as? NSNumber
                        if h != nil && w != nil && h?.doubleValue != 0 {
                            aspectRatio = w!.doubleValue / h!.doubleValue
                            valid = true
                        }
                    }
                }
                if !valid {
                    return nil
                }
            }
        ...
        

        >

        ...
            public let aspectRatio: Double
        ...
            init?(data: NSDictionary?) {
                if let urlString = data?.valueForKeyPath(TwitterKey.MediaURL) as? NSString {
                    if let url = NSURL(string: urlString as String) {
                        self.url = url
                        let h = data?.valueForKeyPath(TwitterKey.Height) as? NSNumber
                        let w = data?.valueForKeyPath(TwitterKey.Width) as? NSNumber
                        if h != nil && w != nil && h?.doubleValue != 0 {
                            aspectRatio = w!.doubleValue / h!.doubleValue
                            return
                        }
                    }
                }
                return nil
            }
        ...
        

        【讨论】:

        • Bill Evans,感谢您对我的问题的及时而全面的回答。到目前为止,我已经编译好 User 和 MediaItem 类,目前正在处理 Tweet 类。
        • Bill Evans,你愿意分享你更新的 Twitter 包吗?将不胜感激。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多