2016-07-02 11 views
1

私は、ユーザーの複数の選択をtableviewから比較し、それらをParseデータベースと比較しようとしています。だから私の問題は2倍です1.私の現在のコードはそれについて正しい方法で行くのですか? 2.値型Boolを引数型PFObjectに変換するにはどうすればよいですか?Swift: '() - > Bool'型の値を 'PFObject'の予想される引数型に変換できません

Cannot convert value of type '() -> Bool' to expected argument type 'PFObject'

enter image description here

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 


    if segue.identifier == "showResults" { 

     // Get reference to destination view controller 
     let destination = segue.destinationViewController as! CollectionViewController 

     if let selectedItem = tableView.indexPathsForSelectedRows{ 

      for var i = 0; i < selectedItem.count; ++i { 

       var currentPath = selectedItem[i] as NSIndexPath 
       var cell = tableView.cellForRowAtIndexPath(currentPath) 

       if let cell = cell { 

        //add major(s) selected to data variable in collectionview as type text(String) 
        destination.data.append(cell.textLabel!.text!) 

       } 

imagesQuery = PFQuery(クラス名: "CollegeImages")させ imagesQuery.selectKeys([ "名前"]) imagesQuery.findObjectsInBackgroundWithBlock({(オブジェクト:[PFObject]? 、エラー:NSError?)エラーの場合は == nil { return returned objects = objects { //オブジェクト配列がnilではない //各オブジェクトを取得するために配列をループしますオブジェクトが返されたオブジェクト{ (object ["name"] as! String)を }}

    } 
       }) 

       let majorSelected:String = (cell?.textLabel!.text!)! 
       let query = PFQuery(className:"CollegeMajors") 
       query.selectKeys(["Major"]) 
       query.findObjectsInBackgroundWithBlock ({ 
        (objects: [PFObject]?, error: NSError?) in 

        if error == nil { 
         // The find succeeded. 
         print("Successfully retrieved \(objects!.count) majors.", terminator: "") 
         // Do something with the found objects 
         if let returnedobjects = objects { 
          if returnedobjects.contains ({($0["Major"] as? String)! == majorSelected}) && query.selectKeys(["College Name"]) == imagesQuery.selectKeys(["name"]) { 
           print("your in!") // transition to the new screen 

          } 
          else { 
           print("your out.") // do whatever 
          } 
         } 
        } else { 
         // Log details of the failure 
         print("Error: \(error!) \(error!.userInfo)", terminator: "") 
        } 
       }) 
      } 

     } 


    } 






} 


override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    //Keep track of which major(s) the user selected 
    let path = tableView.indexPathForSelectedRow! 
    if let cell = tableView.cellForRowAtIndexPath(indexPath){ 


     //Trigger the segue to go to the collection view 
     self.performSegueWithIdentifier("showResults", sender: self) 
    } 
} 
+0

'{...} 'の前後に'( 'と') 'を入れないでください – luk2302

+0

ソースコードとエラーメッセージをテキストとして追加します。画像は検索できません。 –

答えて

0

関心のあなたのラインは、いくつかの問題を保持しています。

まず、クロージャー{["returnedobjects"] as? String == path }contains(_:)メソッドに渡しますが、クロージャーには引数はありません。 1つの引数を取るクロージャを渡す必要があります。その型は配列の要素と同じです。

第2に、["returnedobjects"]は配列なので、["returnedobjects"] as? Stringは常に失敗し、nilを生成します。この部分をStringという有意義な表現に変更する必要がある場合は、このクロージャに渡されたPFObjectインスタンスを利用する必要があります。ローカル変数はNSIndexPath型を持つ意味

let path = tableView.indexPathForSelectedRow! 

第三に、あなたはpathとして宣言します。したがって、左辺がの場合、有効なStringが返されても、StringNSIndexPathを比較することはできません。比較する前に値をStringにする必要があるかもしれません。上といくつかの推測で3つのすべてを考慮して


、以下を行う必要があります。

としてcontainsを含む行にlet path = ...

let majorSelected: String = (Some expression to retrieve "major" from the `path`) 

変更するには、以下の閉鎖を1行を追加します。

if returnedobjects.contains ({$0["Major"] as? String == majorSelected }) { 
+0

ありがとうございます。@OOPerこれはうまくいくようですが、 "}"の後に&&論理演算子を適用するとエラーが発生します。私はこの&&演算子を挿入しています。なぜなら、私のParseデータベース内のあるコレクションを別のコレクションと比較して、ユーザーの選択結果を表示する必要があるからです。エラーの考えは? –

+0

もしあなたの 'の後ろ'のような意味を持つならば、あなたはあなたの '&& '。これは、次のようなものでなければなりません: 'returned $ o [" Major "]?String == majorSelected})&&(...){' returnedobjects.containsコメントであなたの問題を説明することが難しいと思われる場合は、投稿を編集して最新のコードを追加してください。 – OOPer

+0

私の記事を編集したところ、「致命的なエラー:予期せぬことに、選択値をアンラップしている間にnilが見つかりました」というエラーが表示されるのはなぜですか?意味が分からないのは、それぞれのParseデータベースコレクションのテーブルの各行に値と唯一私が過去にこのエラーを受けたのは、テーブルの値が空でない場合です。 –

関連する問題