0

I created an app in which data is displayed on current View from previous View. The data includes an image and Three labels. Now in the current view i have a "send to watch" button which will also store the data to database and at the same time it will transfer the displayed data to watch. I am using FMDB database for storing data. How can i transfer data from IOS app to watch app. Can anybody explain me step by step as i am new to IOS development. My current view of storyboard is below: my storyboard view

and when i run my app, its current page is below application running page

my source code for last view is below:

class TicketDetailViewController: UIViewController, WCSessionDelegate {

var databasePath = NSString()
var holding_Image: UIImage?
var hold_ticketName: String = ""
var hold_ticketDate: String = ""
var hold_ticketTime: String = ""
var session: WCSession!


@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!


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

    let filemgr =  NSFileManager.defaultManager()
    let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let docsDir = dirPaths[0]
    var ticketDB: FMDatabase

    databasePath = (docsDir as NSString).stringByAppendingPathComponent("tickets.sqlite")

    if !filemgr.fileExistsAtPath(databasePath as String)
    {

        ticketDB = FMDatabase(path: databasePath as String)
        if ticketDB.open()
        {

            let sql_stmt = "CREATE TABLE IF NOT EXISTS TICKETS (ID INTEGER PRIMARY KEY AUTOINCREMENT, IMAGE 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 sendToWatch(sender: UIButton) {

    let ticketDB = FMDatabase(path: databasePath as String)
    if ticketDB.open()
    {

        let insertSQL = "INSERT INTO TICKETS (image, ticket_type, date, time) VALUES ('\(display_image.image!)','\(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 is saved to Database!", image: UIImage(named: ""), style: .Alert)

            alt.addAction(PMAlertAction(title: "OK!", style: .Default, action: { (ACTION) -> Void in



            }))

            self.presentViewController(alt, animated: true, completion: nil)
            print(databasePath)

        }
    }

} }

Nishant Narola
  • 255
  • 3
  • 18

1 Answers1

0

You can share data or submit that data using App Groups. Go to target, tap on Capabilities there you can find "App Groups", just enable it and add a entry like "group.com.development.xyzapp" by which you can share data from iOS app to watch and vice versa. You can save data from iOS app by below code.

- (void)sendDataToWatch { NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.development.xyzapp"]; [userDefaults setObject:object forKey:@"itemone"]; [userDefaults setObject:object forKey:@"itemtwo"]; [userDefaults synchronize]; }

Now you can get this data from you watch.

Hope this will help.

  • hello manish, appreciate for your answer i want to display same data in watch as it is displayed in my ios...Can you refer the screenshot that i have attached earlier in my question – Nishant Narola Aug 17 '16 at 09:35
  • `[userDefaults setObject:@"moviename" forKey:@"mymovie"]; [userDefaults setObject:@"dateobject" forKey:@"moviedate"]; [userDefaults setObject:@"ImageObject" forKey:@"moviepic"]; ` Now while you reload app watch list/screen you can get this all keys by all above keys. –  Aug 17 '16 at 10:31
  • hey manish i have put my source code for last view screenshot that i have uploaded earlier..Can u tell me where i am going wrong? – Nishant Narola Aug 17 '16 at 11:34
  • now i want that the displayed data in my last view i.e ticket_title,date and time labels and image below that show display in watch where i have taken 3 labels and an imageView...So how can i do it by the code i have published – Nishant Narola Aug 17 '16 at 11:37