2017-01-06 8 views
0

면책 조항 : 코딩 세계는 처음이지만 코드 작성의 새로운 것은 없습니다.테이블 뷰 행에 plist의 데이터 채우기

섹션 헤더로 장치 가져 오기. 하지만 회사를 tableView 내부의 행으로 사용할 수는 없습니다. 어떻게

let cell = tableView.dequeueReusableCell(withIdentifier: CellIdentifier, for: indexPath) 

같은 회사 이름이 장치 유형

import UIKit 

class MainPageViewController: UITableViewController { 
var devices = [AnyObject]() 

let CellIdentifier = "Cell Identifier" 

var companyName: [AnyObject] { 
    if let companyName = devices["Comp"] as? [AnyObject] { 
     return companyName 
    } else { 
     return [AnyObject]() 
    } 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    title = "Devices" 

    let filePath = Bundle.main.path(forResource: "Array", ofType: "plist") 
    if let path = filePath { 
     devices = NSArray(contentsOfFile: path) as! [AnyObject] 
    } 
    print(device) 
    tableView.register(UITableViewCell.classForCoder(), forCellReuseIdentifier: CellIdentifier) 
} 

override func numberOfSections(in tableView: UITableView) -> Int { 
    return devices.count 
} 

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
    var titleName = title 
    if let deviceHeader = devices[section] as? [String: AnyObject], let titled = deviceHeader["Device"] as? String 
    { 
     titleName = titled 
    } 
    return titleName 
} 

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    // #warning Incomplete implementation, return the number of rows 
    return companyName.count 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: CellIdentifier, for: indexPath) 
    if let company = companyName[indexPath.row] as? [String: AnyObject], let name = company["Company"] as? String { 
     cell.textLabel?.text = name 
    } 

    return cell; 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

<array> 
    <dict> 
     <key>Device</key> 
     <string>Smartphones</string> 
     <key>Comp</key> 
     <array> 
      <dict> 
       <key>Company</key> 
       <string>Apple</string> 
      </dict> 
      <dict> 
       <key>Company</key> 
       <string>Samsung</string> 
      </dict> 
     </array> 
    </dict> 
    <dict> 
     <key>Device</key> 
     <string>Notebooks</string> 
     <key>Comp</key> 
     <array> 
      <dict> 
       <key>Company</key> 
       <string>HP</string> 
      </dict> 
      <dict> 
       <key>Company</key> 
       <string>Dell</string> 
      </dict> 
      <dict> 
       <key>Company</key> 
       <string>Lenovo</string> 
      </dict> 
     </array> 
    </dict> 
</array> 
</plist> 
+0

재정의 FUNC의있는 tableView (INT _있는 tableView : : : jQuery과, numberOfRowsInSection 절) 여기

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { let dict = devices[section] let array = dic["comp"] return array.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: CellIdentifier, for: indexPath) let dict = devices[section] let array = dic["comp"] if let companyname = array[indexPath.row] { cell.textLabel?.text = companyname } return cell; } 

+0

@HimanshuMoradiya가 companyName.count를 추가했지만 아직 데이터를 가져올 수 없습니다. – Dar

+0

실제 코드를 복사하여 붙여 넣으십시오. – rmaddy

답변

0

코드 업데이트됩니다 return 0 // 여기에 devices.count와 같은 값을 추가하십시오. }
+0

완벽하게 작동했습니다 ... 왜 경비가 사용되는지 의심 스럽습니다. – Dar

+0

가드는 if 구조를 중첩하지 않도록합니다. https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html –

+0

회사 이름이 포함 된 문자열의 배열로 직접 comp를 작성하면 코드가 어떻게 생깁니 까? ? – Dar

-1

이 코드를 변경 시도 PLIST 파일을 해당하는있는 tableView 행 내부에 채워 가야한다 이

let cell = tableView.dequeueReusableCell(withIdentifier: CellIdentifier) 
+0

은 작동하지 않는다 ... 많은 에러를 던진다. – Dar

0

시도해주세요. > Int 인은 {불완전한 구현을 # 회신 //이 행 의 수를 반환 -

var devices = [AnyObject]() 
    let CellIdentifier = "Cell" 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     title = "Devices" 
     let filePath = Bundle.main.path(forResource: "Array", ofType: "plist") 
     if let path = filePath { 
      devices = NSArray(contentsOfFile: path) as! [AnyObject] 
     } 
     tableView.register(UITableViewCell.classForCoder(), forCellReuseIdentifier: CellIdentifier) 
    } 
    // MARK: - Table view data source 

    override func numberOfSections(in tableView: UITableView) -> Int { 
     // #warning Incomplete implementation, return the number of sections 
     return devices.count 
    } 
    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
     var titleName = title 
     if let deviceHeader = devices[section] as? [String: AnyObject], let titled = deviceHeader["Device"] as? String 
     { 
      titleName = titled 
     } 
     return titleName 
    } 
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

     guard let device = devices[section] as? [String: AnyObject], let companies = device["Comp"] as? [AnyObject] else { 
      return 0 
     } 
     return companies.count 
    } 
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: CellIdentifier, for: indexPath) 

     guard let device = devices[indexPath.section] as? [String: AnyObject], let companies = device["Comp"] as? [AnyObject] else { 
      return cell 
     } 
     guard let company = companies[indexPath.row] as? [String: AnyObject] else { 
      return cell 
     } 
     cell.textLabel?.text = company["Company"] as? String 
     return cell; 
    } 
+0

return array.count는 리턴 배열로 변환하도록 강제하고있다 !! count – Dar

+0

및 func tableView is not working; 오류 표시는 tyep anyobject의 값을 하위 섹션 – Dar

+0

@Dar의 인덱스로 덧붙일 수 없습니다. @Dar 첫째로 섹션을 통해 장치 사전을 가져 오려고했습니다. 회사의 배열을 얻은 후에 'comp'키로 회사 배열을 가져 오려고합니다. indexPath.row에 의해 필요한 회사 이름 바라건대 당신은 내 접근 방식을 이해할 수 있기를 바랍니다. 문제를 해결하려면 제안 된 코드를 업데이트 한 다음 해주십시오. –