【发布时间】:2014-12-10 04:03:12
【问题描述】:
所以本质上,这就是我目前所拥有的。一个数组
var bars = [BarAnnotation(latitude: 42.022352, longitude: -93.650413, name: "Micky's Irish Pub", deal: "$2 Drinks 9PM-1AM"),
BarAnnotation(latitude: 42.021948, longitude: -93.650348, name: "Cy's Roost", deal: "$2 Drinks 9PM-1AM")
我的自定义 BarAnnotation 类的数组。数组的大小显然是固定的。我一直在尝试从 JSON 文件加载条形数据,然后从那里创建数组。
func retrieveData(){
var filePath = NSBundle.mainBundle().pathForResource("test", ofType: "json")
var data = NSData.dataWithContentsOfMappedFile(filePath!) as NSData
var json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
var test = [] as NSMutableArray
let barArray = json["bars"] as NSArray
for bar in barArray{
var name = bar["name"] as NSString
var deal = bar["deal"] as NSString
var lat = bar["lat"] as Double
var long = bar["long"] as Double
var negLong = -long
var newBar = BarAnnotation(latitude: lat, longitude: negLong, name: name, deal: deal)
test.addObject(newBar)
}
bars.arrayByAddingObjectsFromArray(test)
}
然后我想用这个数组“test”替换条。但是,test 是 NSMutableArray 类型,而 bar 是大小固定的 BarAnnotations 数组。当我尝试转换时,它会导致错误。我觉得这是一个简单的解决方法,我只是在这里遇到了困难。有人吗?
这是我的 BarAnnotation 类
class BarAnnotation: MKPointAnnotation {
var latitude, longitude, distance: Double
var name, imageName, deal: String
var location: CLLocationCoordinate2D
var loc: CLLocation
var annotation: MKPointAnnotation
init(latitude: Double, longitude: Double, name: String, deal: String) {
self.latitude = latitude
self.longitude = longitude
self.name = name
self.imageName = "image1.jpg"
self.deal = deal
self.distance = 0
self.location = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
self.loc = CLLocation(latitude: latitude, longitude: longitude)
self.annotation = MKPointAnnotation()
annotation.setCoordinate(self.location)
annotation.title = name
annotation.subtitle = deal
}
然后我尝试在这里访问它
for bar in bars {
var barName = bar.name.stringByReplacingOccurrencesOfString("\'", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)
var searchString = searchBar.text.stringByReplacingOccurrencesOfString("\'", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)
if barName.rangeOfString(searchString) != nil || barName.lowercaseString.rangeOfString(searchString.lowercaseString) != nil {
var span = MKCoordinateSpanMake(0.005, 0.005)
var region = MKCoordinateRegion(center: bar.location, span: span)
mapView.setRegion(region, animated: true)
mapView.selectAnnotation(bar.annotation, animated: true)
}
}
这是错误
【问题讨论】:
-
“当我尝试转换它时会导致错误”您尝试了什么并确切地知道它导致了什么“错误”?
-
当我遍历 bar 数组时,我尝试访问 BarAnnotation 的一个属性,即位置。但是,它不允许我访问该属性,因为 bar 数组曾经是 BarAnnotations 数组,而现在它是 NSMutableArray。
-
你没有回答这个问题。你要不要帮助?我在您的代码中的任何地方都看不到 location 属性。我也没有看到您访问 bar 数组中任何内容的任何属性。显示导致问题的实际代码 - 而不是准备工作,是实际发生问题的实际代码! - 并说明确切问题出在确切哪一行。代码是否拒绝编译?你会崩溃吗?如果崩溃,崩溃日志是什么?
-
那么这是唯一的编译错误还是众多错误之一?
-
是的,这是唯一的错误。但是,如果我将其注释掉(这是搜索地图的代码),它会运行,但地图上不会加载任何注释。
标签: ios json swift nsmutablearray mkannotationview