2016-03-31 10 views
0

私は1つのURLからいくつかのデータを取得しており、私はテーブルビューで表示しようとしています。その前に私はすべての配列、検索、並べ替えを直接使用しました。それはうまくいきました。しかし今、私は私のテーブルビューのために別のクラスを作成するときこのエラーが表示されますタイプ 'BusinessData'にはメンバー 'sortUsingComparator'がありません

Type 'BusinessData' has no member 'sortUsingComparator'私の並べ替えのfunction.Here私は3ボタンアクションを与えた。そのボタンアクションの中でこのソートコードを宣言しています。しかし、今私はこのエラーが発生しています。

bussinessData.swiftクラス

import UIKit 

class BusinessData { 

    var BusinessName: String? 
    var Address: String? 
    var Rating: Float? 
    var ContactNumber: String? 

    init(json: NSDictionary) { 
     self.BusinessName = json["business_name"] as? String 
     self.Address = json["location"] as? String 
     self.Rating = json["__v"] as? Float 
     self.ContactNumber = json["phone_no"] as? String 


    } 


} 

マイviewcontroller.swiftコード:私はこれを取得していますすべての方法では

@IBAction func sortByAZBtnPress(sender: AnyObject) 
    { 
     RightMenu.hidden = true 



     BusinessData.sortUsingComparator { (dict1, dict2) -> NSComparisonResult in 

      if let name1 = dict1["business_name"] as? String, name2 = dict2["business_name"] as? String 
      { 
       return name1.compare(name2) 
      } 

      return .OrderedAscending 
     } 
     self.tableView.reloadData() 
    } 

    @IBAction func sortByRatingBtnPress(sender: AnyObject) 
    { 

     RightMenu.hidden = true 

     BusinessData.sortUsingComparator { (dict1, dict2) -> NSComparisonResult in 

      if let name1 = dict1["rating"] as? String, name2 = dict2["rating"] as? String 
      { 
       return name2.compare(name1) 
      } 

      return .OrderedDescending 
     } 
     self.tableView.reloadData() 


    } 


    @IBAction func sortByRecentBtnPress(sender: AnyObject) 
    { 

     RightMenu.hidden = true 

     BusinessData.sortUsingComparator { (dict1, dict2) -> NSComparisonResult in 

      if let name1 = dict1["created_at"] as? String, name2 = dict2["created_at"] as? String 
      { 
       return name2.compare(name1) 
      } 

      return .OrderedDescending 
     } 
     self.tableView.reloadData() 
    } 

import UIKit 


class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate { 

    var isTapped:Bool? // cell tap checking bool 

    var selectedIndex:NSIndexPath? 


    @IBOutlet weak var RightMenu: UIView! 




    @IBOutlet weak var searchBar: UISearchBar! 


    @IBOutlet weak var tableView: UITableView! // UITable view declaration 



    var arrDict = [BusinessData]() // array to store the value from json 

    var isSearching:Bool? 

    var arrSearch:NSMutableArray=[] 


    override func viewDidLoad() { 


     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     self.jsonParsingFromURL() // call the json method 

     searchBar.returnKeyType = UIReturnKeyType.Done; 
     searchBar.hidden = true; 


     // nib for custom cell (table view) 
     let nib = UINib(nibName:"customCell", bundle: nil) 
     tableView.registerNib(nib, forCellReuseIdentifier: "cell") 

     indicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 90, 90)) 
     indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray 
     indicator.center = self.view.center 
     indicator.color = UIColor .redColor() 
     self.view.addSubview(indicator) 



    } 
    override func viewWillAppear(animated: Bool) { 
     NSNotificationCenter.defaultCenter().addObserver(self, selector: "searchMethod:", name: "search", object: nil); 
     NSNotificationCenter.defaultCenter().addObserver(self, selector: "endSearch", name: "endSearch", object: nil); 
    } 




    // web services method 
    func jsonParsingFromURL() 
    { 
     let url:NSURL = NSURL(string: "http://sample url/Fes?current_location=toronto&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyIkX18")! 

     if let JSONData = NSData(contentsOfURL: url) 
     { 
      if let json = (try? NSJSONSerialization.JSONObjectWithData(JSONData, options: [])) as? NSDictionary 
      { 
       if let reposArray = json["data"] as? [NSDictionary] 
       { 

        for item in reposArray 
        { 
         let itemObj = item as? Dictionary<String,AnyObject> 

         let b_type = itemObj!["business_type"]?.valueForKey("type") 


         if (b_type as? String == "Taxis") 
         { 

          arrDict.append(BusinessData(json: item)) 

         } 
        } 
       } 

      } 
     } 

    } 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int 
    { 
     if(isSearching == true) 
     { 
      return arrSearch.count; 
     } 
     return self.arrDict.count 
    } 


    // number of rows 
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    { 
     return 1 
    } 

    // height for each cell 
    func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat 
    { 
     return cellSpacingHeight 
    } 



    // calling each cell based on tap and users (premium/non premium) 
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    { 



     let cell:customCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as! customCell 

     if(isSearching == true) 
     { 
      cell.vendorName.text = arrDict[indexPath.section].BusinessName 
      cell.vendorAddress.text = arrDict[indexPath.section].Address 
      cell.VendorRating.rating = arrDict[indexPath.section].Rating! 
     } 
     else 
     { 
      cell.vendorName.text = arrDict[indexPath.section].BusinessName 
      cell.vendorAddress.text = arrDict[indexPath.section].Address 
      cell.VendorRating.rating = arrDict[indexPath.section].Rating! 
     } 
     return cell 
    } 



    // MARK: 
    // MARK: Sort Method 

    @IBAction func sortByRevBtnPress(sender: AnyObject) 
    { 

     self.indicator.startAnimating() 
     self.indicator.hidden = false 
     RightMenu.hidden = true 

     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(1 * NSEC_PER_SEC)), dispatch_get_main_queue()){ 
      self.indicator.stopAnimating() 
      self.indicator.hidden = true 


     }; 
     self.tableView.reloadData() 


    } 


    @IBAction func sortByAZBtnPress(sender: AnyObject) 
    { 
     RightMenu.hidden = true 



     BusinessData.sortUsingComparator { (dict1, dict2) -> NSComparisonResult in 

      if let name1 = dict1["business_name"] as? String, name2 = dict2["business_name"] as? String 
      { 
       return name1.compare(name2) 
      } 

      return .OrderedAscending 
     } 
     self.tableView.reloadData() 
    } 

    @IBAction func sortByRatingBtnPress(sender: AnyObject) 
    { 

     RightMenu.hidden = true 

     BusinessData.sortUsingComparator { (dict1, dict2) -> NSComparisonResult in 

      if let name1 = dict1["rating"] as? String, name2 = dict2["rating"] as? String 
      { 
       return name2.compare(name1) 
      } 

      return .OrderedDescending 
     } 
     self.tableView.reloadData() 


    } 


    @IBAction func sortByRecentBtnPress(sender: AnyObject) 
    { 

     RightMenu.hidden = true 

     BusinessData.sortUsingComparator { (dict1, dict2) -> NSComparisonResult in 

      if let name1 = dict1["created_at"] as? String, name2 = dict2["created_at"] as? String 
      { 
       return name2.compare(name1) 
      } 

      return .OrderedDescending 
     } 
     self.tableView.reloadData() 
    } 

    // MARK: 
    // MARK: Search Method 

    func endSearch() 
    { 
     if(isSearching == false) 
     { 
      isSearching = true; 

      searchBar.hidden = false; 

      yConstraint.constant = 47; 

      self.view.layoutIfNeeded(); 
     } 
     else 
     { 
      isSearching = false; 

      searchBar.hidden = true; 

      tableView.reloadData(); 

      yConstraint.constant = 3; 

      self.view.layoutIfNeeded(); 

      self.view.endEditing(true); 
     } 

    } 


    func searchMethod(notification:NSNotification) 
    { 
     if(isSearching == true) 
     { 
      isSearching = false; 

      searchBar.hidden = true; 

      tableView.reloadData(); 

      yConstraint.constant = 3; 

      self.view.layoutIfNeeded(); 

      self.view.endEditing(true); 
     } 
     else 
     { 
      isSearching = true; 

      searchBar.hidden = false; 

      yConstraint.constant = 47; 

      self.view.layoutIfNeeded(); 
     } 

    } 


    // MARK: 
    // MARK: SearchBar Method 

    func searchBar(searchBar: UISearchBar, textDidChange searchText: String) 
    { 

     arrSearch = []; 

     for(var i=0;i<arrDict.count;i++) 
     { 
      if((BusinessData.objectAtIndex(i).objectForKey("name")?.lowercaseString?.containsString(searchText.lowercaseString)) == true) 
      { 
       arrSearch.addObject(BusinessData.objectAtIndex(i)); 
      } 
     } 

     tableView.reloadData(); 
    } 

    func searchBarSearchButtonClicked(searchBar: UISearchBar) 
    { 
     self.view.endEditing(true); 

     isSearching = false; 

     searchBar.hidden = true; 

     tableView.reloadData(); 

     yConstraint.constant = 3; 

     self.view.layoutIfNeeded(); 
    } 




} 

私はこの中で、これらのボタンのアクションメソッドをエラーを取得していますエラーType 'BusinessData' has no member 'sortUsingComparator' ..これ以下の行に:

BusinessData.sortUsingComparator { (dict1, dict2) -> NSComparisonResult in

おかげ

+0

あなたはクラスではなくオブジェクトで関数を呼び出すように見えますか?それは意図的なのでしょうか?あなたはarrDictを並べ替える気がしますか? – Mattias

+0

申し訳ありませんがあなたを得る? – user5513630

+0

ワインのより徹底的な答えと同じです:) – Mattias

答えて

0

BusinessData私を助けてくださいモデルクラスです。あなたが本当にやりたいことは、var arrDict = [BusinessData]() - BusinessDataの配列を並べ替えることです。

現在のコードBusinessData.sortUsingComparator { (dict1, dict2) -> NSComparisonResult inBusinessDataモデルクラスのクラスメソッドsortUsingComparatorを呼び出しようとしており、2つの辞書が戻ってくることを期待しています。

b1b2BusinessDataのインスタンスではない辞書です
arrDict.sortUsingComparator { (b1, b2) -> NSComparisonResult in 

:あなたが欲しい

は、より多くのようなものです。

+0

私は変更されましたが、同じエラーが発生しました – user5513630

+0

'Type of Value '[BusinessData]'にメンバーがありません 'sortUsingComparator' ' – user5513630

+1

これは明らかにNSArrayメソッドです。 Swift配列のソートを代わりに使用してください。 'let sortedArray = arrDict.sort {(b1、b2) - > Bool in return b1.name Mattias

関連する問題