【问题标题】:Parse SDK methods not working in Xcode 6.3 Beta解析 SDK 方法在 Xcode 6.3 Beta 中不起作用
【发布时间】:2015-04-04 01:51:18
【问题描述】:

到目前为止,我遇到了这样的块问题:

user.signUpInBackgroundWithBlock {
        (succeeded: Bool!, error: NSError!) -> Void in
        if error == nil {
            println("success")
        } else {
            println("\(error)");
            // Show the errorString somewhere and let the user try again.
        }
    }

当我将它添加到 Xcode 中时,我得到了这个:

Cannot invoke 'signUpInBackgroundWithBlock' with an argument list of type '((Bool!, NSError!) -> Void)'

当我在 Xcode 6.3(非测试版)中运行此代码时,它运行良好。但是在 Beta 中它失败了,并且不允许我构建。任何想法,如果这将被清除,或者我可以使用不同的实现。我试过只使用 signUpInBackgroundWithTarget 但如果收到错误,我就无法正确访问错误。

【问题讨论】:

    标签: ios xcode parse-platform


    【解决方案1】:

    确保您使用的是 SDK 版本 1.7.1,然后从闭包中删除类型应该可以解决问题:

    user.signUpInBackgroundWithBlock { (succeeded, error) -> Void in
        if error == nil {
            println("success")
        } else {
            println("\(error)");
            // Show the errorString somewhere and let the user try again.
        }
    }
    

    【讨论】:

      【解决方案2】:

      由于 Swift 1.2 新增了“Nullability Annotations”,你必须像这样重写上面的代码(使用 Parse 1.7.1+):

      user.signUpInBackgroundWithBlock { (succeeded: Bool, error: NSError?) -> Void in
          if let error = error {
              println(error) // there is an error, print it
          } else {
              if succeeded {
                  println("success")
              } else {
                  println("failed")
              }
          }
      }
      

      Parse 现在返回可选项 (?) 而不是显式展开的对象 (!)。

      【讨论】:

      • 奇怪,但 Xcode 显示错误:Cannot invoke 'signUpInBackgroundWithBlock' with an argument list of type '((Bool, NSError?) -> Void)'
      • @orkenstein 你至少使用 Parse 1.7.1 吗?
      【解决方案3】:

      Swift 的符号改变了

      class AAPLList : NSObject, NSCoding, NSCopying { 
          // ...
          func itemWithName(name: String!) -> AAPLListItem!
          func indexOfItem(item: AAPLListItem!) -> Int
      
          @NSCopying var name: String! { get set }
          @NSCopying var allItems: [AnyObject]! { get }
          // ...
      }
      

      注释后:

      class AAPLList : NSObject, NSCoding, NSCopying { 
          // ...
          func itemWithName(name: String) -> AAPLListItem?
          func indexOfItem(item: AAPLListItem) -> Int
      
          @NSCopying var name: String? { get set }
          @NSCopying var allItems: [AnyObject] { get }
          // ...
      }
      

      所以你可以改变

      (succeeded: Bool!, error: NSError!) -> Void in

      (success: Bool, error: NSError?) -> Void in

      【讨论】:

        【解决方案4】:

        您使用的是哪个 Parse SDK?他们几天前发布了 1.7.1 版,应该可以解决您的问题。

        【讨论】:

        • 升级到 1.7.1 有什么特别需要做的吗?我删除了 1.7.0 并拖入了 1.7.1,我仍然得到同样的错误
        • 不......它在发行说明中说它应该解决你的问题,所以它可能是 Xcode 方面的问题
        • 好的,我可以尝试用它从头开始一个新项目,看看我是否得到它。不过还是谢谢。
        【解决方案5】:

        变化:

        (succeeded: Bool!, error: NSError!) -> Void in
        

        (succeeded, error) -> Void in
        

        由于 Parse SDK 中的更改,需要进行此更改

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-05
          • 1970-01-01
          • 2015-09-29
          • 2016-04-19
          相关资源
          最近更新 更多