2016-03-31 20 views
0

Bir url'den veri alıyorum ve tablo görünümünde göstermeye çalışıyorum. Bundan önce ben doğrudan tüm dizi, arama, sıralama.Its iyi çalıştı.Ama şimdi, benim tablo görünümü için ayrı bir sınıf oluştururken, bu hata alıyorum benim sırala işlevimdeTür 'BusinessData' üyesinin 'sortUsingComparator' üyesi yok

Type 'BusinessData' has no member 'sortUsingComparator' alıyorum. Bu düğme kodu içinde bu sıralama kodunu bildiriyorum. Ama şimdi bu hatayı alıyorum.

benim bussinessData.swift sınıf

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 


    } 


} 

Benim viewcontroller.swift kodu: ben bu alıyorum her yöntemde

@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(); 
    } 




} 

Bunda bu düğme eylem yöntemi hatası alıyorum hata Type 'BusinessData' has no member 'sortUsingComparator' .. Bu satırda:

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

+0

Nesnenin değil, sınıftaki işlevi çağırdığınız anlaşılıyor mu? Bu kasıtlı mı? ArrDict'ı sıralamak istediğinizi hissettim mi? – Mattias

+0

üzgünüm seni alamadım ?? – user5513630

+0

Wain'ın daha kapsamlı cevabı ile aynı :) – Mattias

cevap

0

BusinessData bir modeli sınıftır

Teşekkür bana yardım edin. Yapmak istediğiniz şey, var arrDict = [BusinessData]() - BusinessData örneklerinin bir dizisini sıralamaktır.

Geçerli kodunuz BusinessData.sortUsingComparator { (dict1, dict2) -> NSComparisonResult in, model sınıfında bir sınıf yöntemini çağırmaya çalışıyor ve 2 sözlük geri gelmeyi bekliyor.

arrDict.sortUsingComparator { (b1, b2) -> NSComparisonResult in 

nerede b1 ve b2BusinessData örnekleri değil, sözlükleri şunlardır:

Ne istiyorsun gibi daha fazla bir şeydir.

+0

değiştirdim, ancak aynı hata alıyorum – user5513630

+0

'Türün değeri '[BusinessData]' hiçbir üyesi 'sortUsingComparator'' – user5513630

+1

Bu görünüşe göre bir NSArray yöntemi. Bunun yerine Swift dizisinin türünü kullanın. 'sıralanmış sıralanmışArray = arrDict.sort {(b1, b2) -> döndürme b1.name Mattias

İlgili konular