2016-04-26 10 views
0

私は横にスクロールするコレクションビューを1つ持っています。それぞれのデータをテーブルビューに読み込みます。私はコレクションビューの下にテーブルビューを配置しました。アプリクラッシュwhil両方のコレクションビューとテーブルビューを同時に実行する.Crash:致命的なエラー:予期せず、アンラッピング中にオプションの値を外しています

クラッシュレポート:

fatal error: unexpectedly found nil while unwrapping an Optional value 

ここでは私のコードです:

class HomeDiscoverViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UITableViewDataSource, UITableViewDelegate { 

    @IBOutlet var BTCollectionView: UICollectionView! 

    @IBOutlet var DLTableView: UITableView! 

    var BTdata = [BTData]() 

    var Dealsdata = [DealsData]() 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
     ListBusinessTypes() 
    } 
// Values from Api for Business Types 
    func ListBusinessTypes() 
    { 
     let token = NSUserDefaults.standardUserDefaults().valueForKey("access_token") as! String 

     let headers = ["x-access-token": token] 

     let request = NSMutableURLRequest(URL: NSURL(string: "someurl")!, 
              cachePolicy: .UseProtocolCachePolicy, 
              timeoutInterval: 10.0) 
     request.HTTPMethod = "GET" 
     request.allHTTPHeaderFields = headers 

     let session = NSURLSession.sharedSession() 
     let dataTask = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in 
      if (error != nil) 
      { 
       print(error) 

       let ErrorAlert = UIAlertController(title: "Error", message: "Problem with internet connectivity or server, please try after some time", preferredStyle: UIAlertControllerStyle.Alert) 

       // add an action (button) 
       ErrorAlert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 

       // show the alert 
       self.presentViewController(ErrorAlert, animated: true, completion: nil) 
      } 
      else 
      { 
       if let json = (try? NSJSONSerialization.JSONObjectWithData(data!, options: [])) as? Dictionary<String,AnyObject> 
       { 
        let success = json["success"] as? Int 

        if(success == 1) 
        { 
         if let typeValues = json["data"] as? [NSDictionary] 
         { 
          dispatch_async(dispatch_get_main_queue(),{ 

           for item in typeValues 
           { 
            self.BTdata.append(BTData(json:item)) 
           } 
          }) 
         } 
         self.BTCollectionView.reloadData() 
        } 
        else 
        { 
         let message = json["message"] as? String 

         print(message) 

         let ServerAlert = UIAlertController(title: "Error", message: message, preferredStyle: UIAlertControllerStyle.Alert) 

         // add an action (button) 
         ServerAlert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 

         // show the alert 
         self.presentViewController(ServerAlert, animated: true, completion: nil) 
        } 
       } 
      } 
     }) 

     dataTask.resume() 
    } 

    // values from Api For Deals 
    func ListDeals(BTId:String) 
    { 
     let token = NSUserDefaults.standardUserDefaults().valueForKey("access_token") as! String 

     let headers = [ 
      "cache-control": "no-cache", 
      "postman-token": "1befe4c6-ec7c-ccb3-f537-97307f451807" 
     ] 

     let StringURL = "someurl"+token 

     let request = NSMutableURLRequest(URL: NSURL(string: StringURL)!, 
              cachePolicy: .UseProtocolCachePolicy, 
              timeoutInterval: 10.0) 
     request.HTTPMethod = "GET" 
     request.allHTTPHeaderFields = headers 

     let session = NSURLSession.sharedSession() 
     let dataTask = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in 
      if (error != nil) 
      { 
       print(error) 
      } 
      else 
      { 
       if let json = (try? NSJSONSerialization.JSONObjectWithData(data!, options: [])) as? Dictionary<String,AnyObject> 
       { 
        let success = json["success"] as? Int 

        if(success == 1) 
        { 
         if let DealsValues = json["data"] as? [NSDictionary] 
         { 
          dispatch_async(dispatch_get_main_queue(),{ 

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

            let b_type = itemObj!["business_type"] as? String 

            if(b_type == BTId) 
            { 
             self.Dealsdata.append(DealsData(json:item)) 
            } 
           } 
           self.DLTableView.reloadData() 
          }) 
         } 
        } 
        else 
        { 
         let message = json["message"] as? String 

         print(message) 

         let ServerAlert = UIAlertController(title: "Error", message: message, preferredStyle: UIAlertControllerStyle.Alert) 

         // add an action (button) 
         ServerAlert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 

         // show the alert 
         self.presentViewController(ServerAlert, animated: true, completion: nil) 
        } 

       } 

      } 
     }) 

     dataTask.resume() 
    } 

    // Mark : Collection View Delegate and Datasource(Business Type) 
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    { 
     return BTdata.count 
    } 

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
    { 
     let cell: DDLCollectionCell = collectionView.dequeueReusableCellWithReuseIdentifier("BTCell", forIndexPath: indexPath) as! DDLCollectionCell 
     cell.BTName.text = BTdata[indexPath.row].BTNames 
     return cell 
    } 

    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 
    { 
     ListDeals(BTdata[indexPath.row].BTIds!) 
    } 



    // Mark : Table View Delegate and Datasource(Deals) 

    // count of search value and row value that are displaying 
    func numberOfSectionsInTableView(tableView: UITableView) -> Int 
    { 
     return self.Dealsdata.count 
    } 

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


    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    { 
     let cell:DealsListTableCell = self.DLTableView.dequeueReusableCellWithIdentifier("cell") as! DealsListTableCell 
     cell.DealName.text = Dealsdata[indexPath.row].DealNames 
     cell.DealExpiryDate.text = Dealsdata[indexPath.row].DealAddresses 
     return cell 
    } 

私はここでそのfatelエラーを取得しています:

self.BTCollectionView.reloadData() 

をmethod.Iは、すべての追加ListBusinessTypes()の下デリゲートとデータソース。しかし、私は何を知っていない行方不明です。私を助けてください。

ありがとうございます。

+0

コンセント 'BTCollectionView 'は接続されていますか? –

+0

はい、その接続 – user5513630

答えて

0

これはどちらか2つの理由で起こることがあります。

  1. You may not given the right "Reuse Identifier" (in your case: either 'BTCell' or 'cell') in the cell class xib of either table view or collection view.

  2. If mistakenly you are setting "nil" text to label.

Generally this type of error comes when your variable is set to nil, but your code is expecting it to not be nil (try to figure out this by using the error breakpoints).

ホープこれはあなたが解決するのに役立ちます!

+0

私は最初にこの2つだけをチェックしました。それはまあまあです。しかし、私は私のコレクションのビューの名前にこのエラーを与えて私の知らない?コレクションビューの名前を追加する場合.delegate&データソース=自己も。次に、私が.Againを実行すると、コレクションビューのデータソースでこのクラッシュが発生しています – user5513630

+0

コレクションビューでのみ発生していますか? –

+0

はい。私のテーブルビューを削除してチェックしました。コレクションビューでも同じエラーが表示されます – user5513630

関連する問題