Swift UIView draw(U1;:)中的SQLite3查询不使用CATiledLayer
虽然可以读取UIView draw(View:)内的数据,但当UIView图层设置为CATiledLayer时,则无法读取数据。代码如下(使用CATiledLayer时给出“线程4:EXC\u坏访问(代码=1,地址=0x7fcc95b1d170)”:Swift UIView draw(U1;:)中的SQLite3查询不使用CATiledLayer,swift,uiview,sqlite,drawrect,catiledlayer,Swift,Uiview,Sqlite,Drawrect,Catiledlayer,虽然可以读取UIView draw(View:)内的数据,但当UIView图层设置为CATiledLayer时,则无法读取数据。代码如下(使用CATiledLayer时给出“线程4:EXC\u坏访问(代码=1,地址=0x7fcc95b1d170)”: }我找到了答案。可能问题在于,当使用CATiledLayer时,“在一个或多个后台线程上调用层的draw(in:)方法”(),而SQLite“无法处理多线程情况”() class Test2: UIView{ var points = [Strin
}我找到了答案。可能问题在于,当使用CATiledLayer时,“在一个或多个后台线程上调用层的draw(in:)方法”(),而SQLite“无法处理多线程情况”()
class Test2: UIView{
var points = [String]()
override init(frame: CGRect){
super.init(frame: frame)
let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("DB.sqlite")
if sqlite3_open(fileURL.path, &db) == SQLITE_OK{
print(fileURL.path)
}
else{
print("error opening database")
}
}
required init?(coder aDecoder: NSCoder){
super.init(coder: aDecoder)
}
//Thread 4: EXC_BAD_ACCESS (code=1, address=0x7fcc95b1d170) when the following is used
//override class var layerClass: AnyClass{
// return CATiledLayer.self
//}
func read(tile: String){
var stmt:OpaquePointer?
points = []
let queryString = "SELECT * FROM Map WHERE tile = '\(tile)'"
if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("error preparing read: \(errmsg)")
return
}
while(sqlite3_step(stmt) == SQLITE_ROW){
points = String(cString: sqlite3_column_text(stmt, 2)).components(separatedBy: ",")
}
}
override func draw(_ rect: CGRect){
read(tile: "110_100")
print(points)
}