这是我的tableview控制器。我在类中声明了我的mapSearch数组来传递。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
let selectedMap = mapSearch[indexPath.row]
let mapviewDestination = MapViewController()
mapviewDestination.mapString = selectedMap
performSegueWithIdentifier("showDetails", sender: tableView)
}
这是我的mapViewController代码。
var mapString : String?
实际搜索。
var request = MKLocalSearchRequest()
request.naturalLanguageQuery = mapString
request.region = self.placeMap.region
var search:MKLocalSearch = MKLocalSearch.init(request: request)
search.startWithCompletionHandler {
(response:MKLocalSearchResponse!, error:NSError!) in
if !(error != nil) {
var placemarks:NSMutableArray = NSMutableArray()
for item in response.mapItems {
placemarks.addObject((item as MKMapItem).placemark)
}
self.placeMap.removeAnnotations(self.placeMap.annotations)
self.placeMap.showAnnotations(placemarks, animated: true)
} else {
}
}
我的问题是,当我运行模拟器时,它不会根据mapString进行搜索。
欢迎任何想法!
修改
我一直在尝试这个而且没有运气:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.cellForRowAtIndexPath(indexPath)
tableView.deselectRowAtIndexPath(indexPath, animated: true)
let selectedMap = mapSearch[indexPath.row]
performSegueWithIdentifier("showDetails", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if segue.identifier == "showDetails" {
var mapController = segue.destinationViewController as MapViewController
mapController.mapString = mapSearch
}
}
答案 0 :(得分:1)
您确定mapviewDestination
中的didSelectRowAtIndexPath
未被释放和销毁吗?你给它分配了一个mapString
,但是你没有做任何事情。
搜索是在nil(或空)字符串上执行的,因为您实际上从未设置过mapString
。
如果你需要使用segue在两个视图控制器之间传递数据,你应该使用UIViewController
的{{1}}(你只需在你的呈现视图控制器中重新实现它)。它为您提供了一个指向所呈现的视图控制器的指针,您可以在它进入屏幕之前进行配置。