gpt4 book ai didi

ios - swift 错误 : fatal error: Cannot index empty buffer

转载 作者:可可西里 更新时间:2023-11-01 01:06:27 25 4
gpt4 key购买 nike

我是 Swift 语言的新手。我创建了一个 MapKit 应用程序,它从 Sqlite 数据库(最新的 FMDB 堆栈)中递归地检索 MKPointAnnotation 数据(纬度、日志和标题)。

目的是把一堆兴趣点放在一个MKMapViewDelegate上。我尝试过不使用数组,但 mapView.addAnnotation 会覆盖任何点并仅显示 map 上的最后一个点,因此我正在尝试使用数组。

我已经创建了一个函数,但是当调用 wpoint 数组时,我在运行时收到错误“ fatal error :无法索引空缓冲区”。

代码如下:

func initializeRoute()
{

sharedInstance.database!.open()
var resultSet: FMResultSet! = sharedInstance.database!.executeQuery("SELECT * FROM Route", withArgumentsInArray: nil)

// DB Structure

var DBorder: String = "order" // Int and Primary Index
var DBlatitude: String = "latitude" // Float
var DBlongitude: String = "longitude" // Float

// Array declaration
var wpoint: [MKPointAnnotation] = []

// Loop counter init
var counter: Int = 0

if (resultSet != nil) {
while resultSet.next() {
counter = counter + 1

wpoint[counter].coordinate = CLLocationCoordinate2DMake(
(resultSet.stringForColumn(String(DBlatitude)) as NSString).doubleValue,
(resultSet.stringForColumn(String(DBlongitude)) as NSString).doubleValue
)
wpoint[counter].title = resultSet.stringForColumn(DBorder)
mapView.addAnnotation(wpoint[counter])

}
}

sharedInstance.database!.close()

}

println ("Coordinate =\(wpoint.coordinate)") 显示所有数据,我在数组声明中弄乱了一些东西...

最佳答案

数组声明:

var wpoint: [MKPointAnnotation] = []

创建一个数组(零元素)。

然后,作为Swift documentation说:

It is not possible to insert additional items into the array using subscripting:

这就是为什么您稍后会在这一行收到“ fatal error :无法索引空缓冲区”错误:

wpoint[counter].coordinate = ...


相反,正如文档中所说,使用 append 方法或 += 运算符。

无论哪种方式,您都需要在每次迭代时创建一个 MKPointAnnotation 对象,设置其属性,将其添加到数组中,然后将其传递给 addAnnotation。例如:

var wpoint: [MKPointAnnotation] = []

if (resultSet != nil) {
while resultSet.next() {

let pa = MKPointAnnotation()

pa.coordinate = CLLocationCoordinate2DMake(
(resultSet.stringForColumn(String(DBlatitude)) as NSString).doubleValue,
(resultSet.stringForColumn(String(DBlongitude)) as NSString).doubleValue
)

pa.title = resultSet.stringForColumn(DBorder)

wpoint.append(pa)
//wpoint += [pa] //alternative way to add object to array

mapView.addAnnotation(pa)
}
}

请注意一些额外的事情:

  1. wpoint 数组一开始并不是真正必需的,因为您使用 addAnnotation(单数)一次添加一个注释并且代码没有做任何其他事情使用 wpoint
  2. 如果您真的想使用wpoint 并“一次性”向 map 添加注释,那么在循环中,您应该只向数组添加注释,然后循环之后,调用一次addAnnotations(复数)并将整个数组传递给它。
  3. 使用 counter 作为数组索引的原始代码假设第一个索引是 1(counter 被初始化为 0 但它在循环的顶部递增)。在 Swift 和许多其他语言中,数组索引是从零开始的。
  4. 一个小问题,但问题中的代码不是“递归地”检索数据。它正在迭代地检索数据。例如,如果 initializeRoute 方法调用自身,则递归。

关于ios - swift 错误 : fatal error: Cannot index empty buffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27871024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com