Простое отображаемое значение Tableview

#ios #swift #tableview

#iOS #swift #просмотр таблицы

Вопрос:

Я новичок в swift3. Здесь я просто хочу отобразить «Первый», «Второй», «Третий» в tableview, и это выглядит не очень хорошо.

Руководство с YouTube — swift2, и я пытаюсь преобразовать его в swift3. Я думаю, что проблема связана с кодом:

 let Cell = self.tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as UITableViewCell
  

Я изо всех сил стараюсь искать, какhttps://www.codeschool.com/blog/2016/09/14/evolving-to-swift-3 / но я не знаю, что произойдет. Xcode не может обнаружить какую-либо ошибку в коде, и он может быть запущен. Tableview в iphone simulator пустой или весь экран черный.

Для его реализации я использую навигационный контроллер. Класс в viewcontoller и идентификатор в ячейке табличного представления правильно заданы в корневом окне просмотра. Пожалуйста, помогите мне. Спасибо.

 import Foundation
import UIKit

class ViewController: UITableViewController {

var Array = [String]()

override func viewDidLoad() {
    super.viewDidLoad()

    Array = ["First","Second","Third"]

}

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

 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let Cell = self.tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as UITableViewCell

    Cell.textLabel?.text = Array[indexPath.row]

    return Cell
}
  

}

введите описание изображения здесь

Результат в консоли:

 2016-10-24 01:10:38.111399 TableApp[27276:2609723] subsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0
2016-10-24 01:10:38.114012 TableApp[27276:2609723] subsystem: com.apple.UIKit, category: HIDEventIncoming, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0
2016-10-24 01:10:38.122822 TableApp[27276:2609719] subsystem: com.apple.BaseBoard, category: MachPort, enable_level: 1, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0, enable_private_data: 0
2016-10-24 01:10:38.138706 TableApp[27276:2609660] subsystem: com.apple.UIKit, category: StatusBar, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0
2016-10-24 01:10:38.200 TableApp[27276:2609660] *** Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3599.6/UITableView.m:8035
2016-10-24 01:10:38.203 TableApp[27276:2609660] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView (<UITableView: 0x7fbac906bc00; frame = (0 0; 375 667); clipsToBounds = YES; autoresize = W H; gestureRecognizers = <NSArray: 0x61000004e400>; layer = <CALayer: 0x610000235ce0>; contentOffset: {0, -64}; contentSize: {375, 132}>) failed to obtain a cell from its dataSource (<TableApp.GetStringViewController: 0x7fbac8d06180>)'
*** First throw call stack:
(
    0   CoreFoundation                      0x000000010fab034b __exceptionPreprocess   171
    1   libobjc.A.dylib                     0x000000010c9dc21e objc_exception_throw   48
    2   CoreFoundation                      0x000000010fab4442  [NSException raise:format:arguments:]   98
    3   Foundation                          0x000000010c572edd -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:]   195
    4   UIKit                               0x000000010d429ff2 -[UITableView _configureCellForDisplay:forIndexPath:]   222
    5   UIKit                               0x000000010d435c10 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:]   860
    6   UIKit                               0x000000010d435e07 -[UITableView _createPreparedCellForGlobalRow:willDisplay:]   74
    7   UIKit                               0x000000010d409871 -[UITableView _updateVisibleCellsNow:isRecursive:]   3295
    8   UIKit                               0x000000010d43f189 -[UITableView _performWithCachedTraitCollection:]   110
    9   UIKit                               0x000000010d4259e3 -[UITableView layoutSubviews]   222
    10  UIKit                               0x000000010d38d344 -[UIView(CALayerDelegate) layoutSublayersOfLayer:]   1237
    11  QuartzCore                          0x0000000112875cdc -[CALayer layoutSublayers]   146
    12  QuartzCore                          0x00000001128697a0 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE   366
    13  QuartzCore                          0x000000011286961e _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE   24
    14  QuartzCore                          0x00000001127f762c _ZN2CA7Context18commit_transactionEPNS_11TransactionE   280
    15  QuartzCore                          0x0000000112824713 _ZN2CA11Transaction6commitEv   475
    16  QuartzCore                          0x0000000112825083 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv   113
    17  CoreFoundation                      0x000000010fa54e17 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__   23
    18  CoreFoundation                      0x000000010fa54d87 __CFRunLoopDoObservers   391
    19  CoreFoundation                      0x000000010fa394b6 CFRunLoopRunSpecific   454
    20  UIKit                               0x000000010d2c2db6 -[UIApplication _run]   434
    21  UIKit                               0x000000010d2c8f34 UIApplicationMain   159
    22  TableApp                            0x000000010c3fb5bf main   111
    23  libdyld.dylib                       0x00000001109da68d start   1
)
libc  abi.dylib: terminating with uncaught exception of type NSException
(lldb) 
  

Комментарии:

1. Можете ли вы показать полное описание исключения? Просто скопируйте трассировку стека с консоли вместо скриншота и отредактируйте свой ответ с этими деталями.

2. Содержит ли ваш tableview в вашей раскадровке ячейку с «Cell» в качестве идентификатора повторного использования?

3. Обновлено @alexburtnik

4. @MarieDm Я уже поместил идентификатор «Cell» в ячейку табличного представления

5. Проблема в том, что ваша ячейка для строки возвращает nil вместо ячейки. Давайте выясним, почему именно. Итак, вы используете раскадровки с табличным представлением, и вы установили там идентификатор повторного использования, и вы не используете никаких пользовательских классов для своих ячеек, верно?

Ответ №1:

Попробуйте этот код: Код протестирован в Swift 3.

Примечание: Как вы упомянули, вы только начали программировать Swift 3. Я создал TableView программно. Просто скопируйте приведенный ниже код и вставьте в свой ViewController. запустите проект…

     import UIKit

    class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    private let MyArray: NSArray = ["First","Second","Third"]
    private var myTableView: UITableView!

    override func viewDidLoad() {
    super.viewDidLoad()

    // Status Bar 
    let barHeight: CGFloat = UIApplication.shared.statusBarFrame.size.height 

    // View 
    let displayWidth: CGFloat = self.view.frame.width
    let displayHeight: CGFloat = self.view.frame.height

    // TableView 
    myTableView = UITableView(frame: CGRect(x: 0, y: barHeight, width: displayWidth, height: displayHeight - barHeight))

    // Cell 
    myTableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyCell")

    // DataSource 
    myTableView.dataSource = self

    // Delegate 
    myTableView.delegate = self

    // View 
    self.view.addSubview(myTableView)
}

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


func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("Num: (indexPath.row)")
    print("Value: (MyArray[indexPath.row])")
}

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath as IndexPath) 

    cell.textLabel!.text = "(MyArray[indexPath.row])"

    return cell
 }

}
  

Вывод:
введите описание изображения здесь

Комментарии:

1. Я не знаю, почему не могу его запустить. Я запускаю новый проект, копирую код и устанавливаю идентификатор повторного использования как «myCell». Ошибка не обнаружена. Tableview в симуляторе iphone пуст. И concole показывает что-то вроде предыдущего.