ios - Fetch data from FMDB Database -
in app, want fetch data fmdb database , data want send watch. problem when data fetched, doesn't show actual data in console ticket_type = movie, time = 11:42 p.m. instead shows memory address result.
the source code ticketdata below
class ticketdata: nsobject { var field1: string? var field2: string? var field3: string? var field4: string? override init() { super.init() } convenience init(field1: string, field2: string, field3: string, field4: string) { self.init() self.field1 = field1 self.field2 = field2 self.field3 = field3 self.field4 = field4 }
}
the screenshot app screenshot app
my source code below
class ticketdetailviewcontroller: uiviewcontroller, wcsessiondelegate { var databasepath = nsstring() var holding_ticket_category: string = "" var holding_image: uiimage? var hold_ticketname: string = "" var hold_ticketdate: string = "" var hold_tickettime: string = "" var session: wcsession! var ticketdataarray:[ticketdata] = [] @iboutlet weak var ticket_grey: uiimageview! @iboutlet weak var cropped_frame: uiimageview! @iboutlet weak var display_image: uiimageview! @iboutlet weak var ticket_type_name: uilabel! @iboutlet weak var ticket_date: uilabel! @iboutlet weak var ticket_time: uilabel! @iboutlet weak var ticket_category: uilabel! override func viewdidload() { super.viewdidload() if wcsession.issupported(){ self.session = wcsession.defaultsession() self.session.delegate = self self.session.activatesession() } display_image.image = holding_image ticket_type_name.text = hold_ticketname ticket_date.text = hold_ticketdate ticket_time.text = hold_tickettime ticket_category.text = holding_ticket_category let filemgr = nsfilemanager.defaultmanager() let dirpaths = nssearchpathfordirectoriesindomains(.documentdirectory, .userdomainmask, true) let docsdir = dirpaths[0] var ticketdb: fmdatabase databasepath = (docsdir nsstring).stringbyappendingpathcomponent("ticket_pass.sqlite") if !filemgr.fileexistsatpath(databasepath string) { ticketdb = fmdatabase(path: databasepath string) if ticketdb.open() { let sql_stmt = "create table if not exists ticket (id integer primary key autoincrement, image text, ticket_category text, ticket_type text, date text, time text)" if !ticketdb.executestatements(sql_stmt) { print("error: \(ticketdb.lasterrormessage())") } ticketdb.close() } else { print("error: \(ticketdb.lasterrormessage())") } } }
@ibaction func addtickets(sender: uibutton) {
let ticketdb = fmdatabase(path: databasepath string) if ticketdb.open() { let insertsql = "insert ticket (image, ticket_category, ticket_type, date, time) values ('\(display_image.image!)', '\(ticket_category.text!)', '\(ticket_type_name.text!)', '\(ticket_date.text!)', '\(ticket_time.text!)')" let result = ticketdb.executeupdate(insertsql,withargumentsinarray: nil) if !result { print("error: \(ticketdb.lasterrormessage())") } else { let alt = pmalertcontroller(title: "success!", description: "your data saved database!", image: uiimage(named: ""), style: .alert) alt.addaction(pmalertaction(title: "ok!", style: .default, action: { (action) -> void in self.navigationcontroller?.poptorootviewcontrolleranimated(true) })) self.presentviewcontroller(alt, animated: true, completion: nil) print(databasepath) } } } @ibaction func deletetickets(sender: uibutton) { let alt = pmalertcontroller(title: "delete ticket details!", description: "are sure?", image: uiimage(named: ""), style: .alert) alt.addaction(pmalertaction(title: "cancel", style: pmalertactionstyle.default, action: { (action) -> void in self.dismissviewcontrolleranimated(true, completion: nil) })) alt.addaction(pmalertaction(title: "ok", style: pmalertactionstyle.default, action: { (action) -> void in self.navigationcontroller?.poptorootviewcontrolleranimated(true) })) self.presentviewcontroller(alt, animated: true, completion: nil) } @ibaction func sendtowatch(sender: anyobject) { let ticketdb = fmdatabase(path: databasepath string) if ticketdb.open() { let insertsql = "insert ticket (image, ticket_category, ticket_type, date, time) values ('\(display_image.image!)', '\(ticket_category.text!)', '\(ticket_type_name.text!)', '\(ticket_date.text!)', '\(ticket_time.text!)')" let result = ticketdb.executeupdate(insertsql,withargumentsinarray: nil) if !result { print("error: \(ticketdb.lasterrormessage())") } else { let alt = pmalertcontroller(title: "success!", description: "your data saved database!", image: uiimage(named: ""), style: .alert) alt.addaction(pmalertaction(title: "ok!", style: .default, action: { (action) -> void in let ticketdb = fmdatabase(path: self.databasepath string) if ticketdb.open() { let querysql = "select * ticket" let result: fmresultset? = ticketdb.executequery(querysql, withargumentsinarray: nil) if let result = result { var ticketdata = ticketdata() while (result.next() == true) { let image = result.stringforcolumn("image") let ticket_category = result.stringforcolumn("ticket_category") let ticket_type = result.stringforcolumn("ticket_type") let date = result.stringforcolumn("date") let time = result.stringforcolumn("time") ticketdata = ticketdata(field1: ticket_category!, field2: ticket_type!, field3: date!, field4: time!, field5: image!) self.ticketdataarray.append(ticketdata) } print("data: \(result.resultdictionary())") } }else { print("error: \(ticketdb.lasterrormessage())") } ticketdb.close() } })) self.presentviewcontroller(alt, animated: true, completion: nil) print(databasepath) } }
the ticketdata object , you're trying print object using,
print("data: \(ticketdata)")
whenever try print object, object's memory address printed , not object's properties. if want print object properties, print 1 one like,
print("data: \(ticketdata.ticket_type)")
and on. if want print @ 1 shot, can dictionary object resultset , print it.
print("data:\(resultset.resultdictionary())")
edit: how last value of result set.
if let result = result { var ticketdata = ticketdata() var latestticketdict = [string: anyobject]() while (result.next() == true) { let image = result.stringforcolumn("image") let ticket_category = result.stringforcolumn("ticket_category") let ticket_type = result.stringforcolumn("ticket_type") let date = result.stringforcolumn("date") let time = result.stringforcolumn("time") ticketdata = ticketdata(field1: ticket_category!, field2: ticket_type!, field3: date!, field4: time!, field5: image!) self.ticketdataarray.append(ticketdata) latestticketdict = result.resultdictionary() } print("data: \(latestticketdict)") }
update: recommend go through fmdb documentation on github page , study tutorials on fmdb write more efficient db operations. don't close database , open database every db operation creator of fmdb says when close sqlite database (using fmdb) -
"keep open unless change schema. that's reason close it, , re-opening little hit on performance / battery life."
also recommend take @ fmdatabasequeue.
hope helps.
Comments
Post a Comment