2017-07-10 17 views
0

テーブルビューのビューコントローラは1つあります。データがあると、それはテーブルビューに表示されます。データがない場合は、データラベルを表示する必要はありません。私は以下のコードを使用しました。しかし、このライン上でのクラッシュ:この行の利用可能なデータがありませんテーブルビューにラベルが表示されていません

func numberOfSections(in tableView: UITableView) -> Int { 

    var numOfSection: NSInteger = 0 

    if (self.alldata?.count)! > 0 { 

     self.tableView.backgroundView = nil 
     numOfSection = 1 

    } else { 

     let rect = CGRect(x: 0, 
          y: 0, 
          width: self.tableView.bounds.size.width, 
          height: self.tableView.bounds.size.height) 
     let noDataLabel: UILabel = UILabel(frame: rect) 

     noDataLabel.text = "No Data Available" 
     noDataLabel.textColor = UIColor(red: 22.0/255.0, green: 106.0/255.0, blue: 176.0/255.0, alpha: 1.0) 
     noDataLabel.textAlignment = NSTextAlignment.center 
     self.tableView.backgroundView = noDataLabel 

    } 
    return numOfSection 

} 

クラッシュ:if (self.alldata?.count)! > 0 { クラッシュ:(lldb)。それ以上の情報はありません。

ありがとうございます!

+0

'self.alldata?.count'これが何を表示するのか –

+0

self.alldataで利用可能なデータがあるかどうかチェックしましたか? –

+0

if(self.alldata?.count)を変更してください! > 0この行をif(self.alldata?.count)?? 0> 0を返します。これは、オプションの値を強制的にアンラッピングするためです。 –

答えて

0

alldataがゼロで、(self.alldata?.count)!でアンラップしようとしたためにクラッシュした可能性があります。そのように変更してみてください

if self.alldata.count != nil && (self.alldata?.count)! > 0 { 
    self.tableView.backgroundView = nil 
    numOfSection = 1 
} 
1

データがないときは、強制的に配列をアンラップしています。そのため、クラッシュしています。 self.alldata?.count ?? 0 > 0この

if let alldata = self.alldata, alldata.count > 0 { 
     self.tableView.backgroundView = nil 
     numOfSection = 1 
} 
1

変更(self.alldata?.count)! > 0よう

チェック。 (self.alldata?.count)の結果を強制的にアンラップしていますので、alldataがnilならnilを強制アンラッピングします。

numberOfSectionsなどの機能で副作用を起こすことは非常に悪いことです。その関数はセクションの数を返すだけで何もしません。あなたのUI操作をどこか別の場所に置いてください。

関連する問題