2016-09-17 2 views
0

У меня есть UITableView, что делает использование Array из MKMapItem для своего источника данных, источник данных имеет 10 элементов внутри него в моем тесте, однако, когда я пытаюсь загрузить данные сбои приложений с :Swift MKMapItem DataSource для Tableview не работает

2016-09-17 22: 17: 58,097901 приложение [460: 48227] * недостаточность Утверждение в - [UITableView _configureCellForDisplay: forIndexPath:], /BuildRoot/Library/Caches/com.apple.xbs /Sources/UIKit/UIKit-3599.6/UITableView.m:8035 2016-09-17 22: 17: 58.099698 приложение [460: 48227] * Завершение приложения из-за неотображаемое exception 'NSInternalInconsistencyException', причина: 'UITableView (; layer =; contentOffset: {0, -64}; contentSize: {768, 440}>) не удалось получить клетки от ее DataSource ()»

Мой код:

extension LocationSearchTable : UISearchResultsUpdating { 
    @available(iOS 8.0, *) 
    public func updateSearchResults(for searchController: UISearchController) { 
     guard let mapView = mapView, 
      let searchBarText = searchController.searchBar.text else { return } 

     print(searchBarText) 

     let request = MKLocalSearchRequest() 
     request.naturalLanguageQuery = searchBarText 
     request.region = mapView.region 
     let search = MKLocalSearch(request: request) 
     search.start { response, _ in 
      guard let response = response else { 
       return 
      } 
      print(response.mapItems) 
      self.matchingItems = response.mapItems 
      self.tableView.reloadData() 
     } 
    } 

    func updateSearchResultsForSearchController(searchController: UISearchController) { 
     guard let mapView = mapView, 
      let searchBarText = searchController.searchBar.text else { return } 
     let request = MKLocalSearchRequest() 
     request.naturalLanguageQuery = searchBarText 
     request.region = mapView.region 
     let search = MKLocalSearch(request: request) 
     search.start { response, _ in 
      guard let response = response else { 
       return 
      } 
      self.matchingItems = response.mapItems 
      self.tableView.reloadData() 
     } 
    } 
} 

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

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "cell")! 
     let selectedItem = matchingItems[indexPath.row].placemark 
     cell.textLabel?.text = selectedItem.name 
     cell.detailTextLabel?.text = parseAddress(selectedItem: selectedItem) 
     return cell 
    } 
} 

extension LocationSearchTable { 
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     let selectedItem = matchingItems[indexPath.row].placemark 
     handleMapSearchDelegate?.dropPinZoomIn(placemark: selectedItem) 
     dismiss(animated: true, completion: nil) 
    } 
} 

В моем тестовом примере оператор печати в функции updateSearchResults дает выход:

[<MKMapItem: 0x174343700> { 
    isCurrentLocation = 0; 
    name = "H C Alexander Ltd"; 
    phoneNumber = "\U200e+44 1394 382585"; 
    placemark = "H C Alexander Ltd, 10 The Thoroughfare, Woodbridge, IP12 1AG, England @ <+52.09266610,+1.31714750> +/- 0.00m, region CLCircularRegion (identifier:'<+52.09266610,+1.31714750> radius 49.91', center:<+52.09266610,+1.31714750>, radius:49.91m)"; 
    timeZone = "Europe/London (BST) offset 3600 (Daylight)"; 
    url = "http://www.alexandersofwoodbridge.co.uk"; 
}, <MKMapItem: 0x174342cb0> { 
    isCurrentLocation = 0; 
    name = "Hudsons C M B H I"; 
    phoneNumber = "\U200e+44 1394 382798"; 
    placemark = "Hudsons C M B H I, 54 The Thoroughfare, Woodbridge, IP12 1AL, England @ <+52.09334980,+1.31937410> +/- 0.00m, region CLCircularRegion (identifier:'<+52.09334980,+1.31937410> radius 49.91', center:<+52.09334980,+1.31937410>, radius:49.91m)"; 
    timeZone = "Europe/London (BST) offset 3600 (Daylight)"; 
    url = "http://www.askhudsons.com"; 
}, <MKMapItem: 0x174156630> { 
    isCurrentLocation = 0; 
    name = "G A H"; 
    phoneNumber = "\U200e+44 1394 386606"; 
    placemark = "G A H, Melton Road, Woodbridge, IP12, England @ <+52.09991570,+1.32574770> +/- 0.00m, region CLCircularRegion (identifier:'<+52.09991570,+1.32574768> radius 124.78', center:<+52.09991570,+1.32574768>, radius:124.78m)"; 
    timeZone = "Europe/London (BST) offset 3600 (Daylight)"; 
    url = "http://www.gah.co.uk"; 
}, <MKMapItem: 0x17015fcc0> { 
    isCurrentLocation = 0; 
    name = "H Helias & Co Ltd"; 
    phoneNumber = "\U200e+44 1394 388400"; 
    placemark = "H Helias & Co Ltd, 102 The Thoroughfare, Woodbridge, IP12 1AR, England @ <+52.09515550,+1.32168410> +/- 0.00m, region CLCircularRegion (identifier:'<+52.09515550,+1.32168410> radius 49.91', center:<+52.09515550,+1.32168410>, radius:49.91m)"; 
    timeZone = "Europe/London (BST) offset 3600 (Daylight)"; 
}, <MKMapItem: 0x17015fed0> { 
    isCurrentLocation = 0; 
    name = "Dr Taylor & Partners"; 
    phoneNumber = "\U200e+44 1394 382046"; 
    placemark = "Dr Taylor & Partners, 7 Little Saint John's Street, Woodbridge, IP12 1EE, England @ <+52.09380320,+1.31892590> +/- 0.00m, region CLCircularRegion (identifier:'<+52.09380320,+1.31892590> radius 49.91', center:<+52.09380320,+1.31892590>, radius:49.91m)"; 
    timeZone = "Europe/London (BST) offset 3600 (Daylight)"; 
    url = "http://www.woodbridgedoctors.com"; 
}, <MKMapItem: 0x174343650> { 
    isCurrentLocation = 0; 
    name = "E H (Bob) Brewster"; 
    placemark = "E H (Bob) Brewster, 10 Sun Lane, Woodbridge, IP12 1EG, England @ <+52.09529930,+1.32073100> +/- 0.00m, region CLCircularRegion (identifier:'<+52.09529930,+1.32073100> radius 49.91', center:<+52.09529930,+1.32073100>, radius:49.91m)"; 
    timeZone = "Europe/London (BST) offset 3600 (Daylight)"; 
}, <MKMapItem: 0x1703400b0> { 
    isCurrentLocation = 0; 
    name = "William H Brown"; 
    phoneNumber = "\U200e+44 1394 380280"; 
    placemark = "William H Brown, 28D Church Street, Woodbridge, IP12 1DH, England @ <+52.09353230,+1.31466980> +/- 0.00m, region CLCircularRegion (identifier:'<+52.09353230,+1.31466980> radius 49.91', center:<+52.09353230,+1.31466980>, radius:49.91m)"; 
    timeZone = "Europe/London (BST) offset 3600 (Daylight)"; 
    url = "https://www.williamhbrown.co.uk/estate-agents/woodbridge"; 
}, <MKMapItem: 0x174342890> { 
    isCurrentLocation = 0; 
    name = "G H Reeve"; 
    phoneNumber = "\U200e+44 1394 384333"; 
    placemark = "G H Reeve, 7 Old Barrack Road, Woodbridge, IP12 4EX, England @ <+52.09248070,+1.30294050> +/- 0.00m, region CLCircularRegion (identifier:'<+52.09248070,+1.30294050> radius 49.91', center:<+52.09248070,+1.30294050>, radius:49.91m)"; 
    timeZone = "Europe/London (BST) offset 3600 (Daylight)"; 
}, <MKMapItem: 0x174343390> { 
    isCurrentLocation = 0; 
    name = "Hemmings J H R"; 
    phoneNumber = "\U200e+44 1394 610517"; 
    placemark = "Hemmings J H R, 5 Mill View Close, Woodbridge, IP12 4HR, England @ <+52.09490750,+1.30139670> +/- 0.00m, region CLCircularRegion (identifier:'<+52.09490750,+1.30139670> radius 49.91', center:<+52.09490750,+1.30139670>, radius:49.91m)"; 
    timeZone = "Europe/London (BST) offset 3600 (Daylight)"; 
}, <MKMapItem: 0x1743434f0> { 
    isCurrentLocation = 0; 
    name = "G A H (Heating Products) Ltd"; 
    phoneNumber = "\U200e+44 1394 386699"; 
    placemark = "G A H (Heating Products) Ltd, Melton Road, Woodbridge, IP12, England @ <+52.09991570,+1.32574770> +/- 0.00m, region CLCircularRegion (identifier:'<+52.09991570,+1.32574768> radius 124.78', center:<+52.09991570,+1.32574768>, radius:124.78m)"; 
    timeZone = "Europe/London (BST) offset 3600 (Daylight)"; 
}] 

я имею TableView и ячейку настроить в моей раскадровке:

enter image description here

ответ

0

Не забудьте зарегистрировать ваш tableview для повторного использования ячеек с cell идентификатор так:

tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") 

Вы могли бы добавить этот код в viewDidLoad, например.

+0

Ячейка установлена ​​в раскадровке, см. Править –