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 image

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

Popular posts from this blog

mysql - Dreamhost PyCharm Django Python 3 Launching a Site -

java - Sending SMS with SMSLib and Web Services -

java - How to resolve The method toString() in the type Object is not applicable for the arguments (InputStream) -