2016-08-31 4 views
0

申し訳ありませんが、これは本当に簡単な質問ですが、NSArrayのカウントを見つけるのが難しいです。Objective-Cをブリッジとして使用している間、素早くインデックス0の問題をチェックする

スウィフト:

var employeeInfoArray: NSArray = [] 

var savedValue: String? 
savedValue = defaults.stringForKey("FromToDuration") 
employeeInfoArray = [EmployeeDatabase .sharedSingletonDatabase().evaluationList(savedValue)] 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{ 
    return (employeeInfoArray[0].count) 

} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{ 
    var simpleId: String? 
    simpleId = "EmpTableViewCell" 

    let cell:EmpTableViewCell = tableView.dequeueReusableCellWithIdentifier(simpleId!) as! EmpTableViewCell 
    cell.empNameLabel.text = employeeInfoArray[0][indexPath.row].name 
    cell.empIDLabel.text = String(employeeInfoArray[0][indexPath.row].uniqueId) 

    return cell 
} 

マイemployeeInfoArray対物Cモデルからブリッジからの階層は次のデータを有する:

NSArray 
->NSArray 
-->Employee1 (MyCustom Class Object) 
-->Employee2 (MyCustom Class Object) 
-->Employee3 (MyCustom Class Object) 

On Request for detail Hierarchy

問題:

numberOfRowsInSectionで3を返すと、3人の従業員の詳細をすべてtableViewに表示できます。

Iは(employeeInfoArray.count)を返す場合、私はリターン(employeeInfoArray [0] .count)を返す場合

を見ただけ1従業員の詳細を取得します。それはクラッシュする。

ここで、0インデックスのカウントを取得するにはどうすればよいですか?

重複としてマークしないでくださいこの質問を過去4時間から検索しました。

+0

ことの一つは、データを取得した後だった 'nameOfEmployee1 = textArray [0] [0] .nameの せidOfEmployee1 = textArray [0] [0] .uniqueId をしましょう print(idOfEmployee1) ' 名前は曖昧に使用しているがuniqueIdは完全に正常に動作しているというエラーが表示されます。これは何が起こっているのですか? –

+0

クラッシュは何ですか?これは非常に危険なコードであり、 'employeeInfoArray'が空のときにこのView Controllerが最初にロードされるときにクラッシュします。空の配列をチェックして0を返さなければなりません。あなたのデータ構造も非常に扱いにくいようです。なぜあなたはEmployeeオブジェクトの配列ではなく、ネストされた配列を持っていますか? – Paulw11

+0

@ Paulw11今週開始したIOS Swiftの新機能です。どうすれば私はEmployeeObjectsの配列を持つことができますか教えてください。私がやっていることはちょうど です。 'employeeInfoArray = [EmployeeDatabase .sharedSingletonDatabase()。evaluationList(savedValue)]'それは、従業員の配列の配列を単独で作成しています。 –

答えて

1

配列アクセスの外側にある[]を使用して、不必要に従業員を別の配列に配置しています。

また、デフォルト値がない場合は、コードをより堅牢にする必要があります。またSwiftでは、Swiftが割り当てられた値からそれを推測できる場合は、変数の型を宣言する必要はありません。

最後に、NSArrayの使用を最小限に抑えます。可能な限り速やかにデータをSwift配列に取得します。その後、内容が入力されます。私は声明 を、次の書き込み時に、私が試した

var employeeInfoArray = [Employee]() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    if let savedValue = defaults.stringForKey("FromToDuration") { 
     employeeInfoArray = EmployeeDatabase.sharedSingletonDatabase().evaluationList(savedValue) as! [Employee] 
    } 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{ 
    return employeeInfoArray.count 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{ 
    var simpleId = "EmpTableViewCell" 

    let cell = tableView.dequeueReusableCellWithIdentifier(simpleId, foIndexPath: indexPath) as! EmpTableViewCell 
    let employee = employeeInfoArray[indexPath.row] 
    cell.empNameLabel.text = employee.name 
    cell.empIDLabel.text = "\(employee.uniqueId)" 

    return cell 
} 
+0

ありがとうございますが、上記のviewDidLoadのコードの後に​​、 'タイプの値[AnyObject]を割り当てることができません!'というエラーがあります。タイプするには '[Employee]' ' –

+0

ダウンキャストを追加するだけです。私の編集を参照してください – Paulw11

+0

ありがとう、完璧に動作します。 –

関連する問題