2016-07-04 10 views
0

メインビューコントローラでデータベースを作成しています。誰も私にそれの答えを与えることができるかわからない。データベースから取得したデータを現在のビューコントローラで表示する方法と、スワイプを使用してiosで別のものを表示する方法

コードブロック:

override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    let filemgr = NSFileManager.defaultManager() 
    let dirPaths = 
     NSSearchPathForDirectoriesInDomains(.DocumentDirectory, 
              .UserDomainMask, true) 

    let docsDir = dirPaths[0] 
    let path = (docsDir as NSString).stringByAppendingPathComponent("contacts.db") 


    databasePath = path 

    if !filemgr.fileExistsAtPath(databasePath as String) { 

     let contactDB = FMDatabase(path: databasePath as String) 

     if contactDB == nil { 
      print("Error: \(contactDB.lastErrorMessage())") 
     } 

     if contactDB.open() { 
      let sql_stmt = "CREATE TABLE IF NOT EXISTS CONTACTS (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, ADDRESS TEXT, PHONE TEXT)" 
      if !contactDB.executeStatements(sql_stmt) { 
       print("Error: \(contactDB.lastErrorMessage())") 
      } 
      contactDB.close() 
     } else { 
      print("Error: \(contactDB.lastErrorMessage())") 
     } 
    } 

} 

私はデータベース をしたが、どのように私は再び、私は同じページにない私はこれを表示する別のページを繰り返してる次のビューコントローラでのデータを取得することができ、このコードを使用して、 。

答えて

0

ビューコントローラではなく、アプリケーションデリゲートにデータベースを実装しないでください。

例:

// declare global database 
var myGlobalDB:FMDatabase? 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    // do your database init stuff here 
    ... 
    myGlobalDB = FMDatabase(path: databasePath as String) 
    ... 
} 

あなたmyGlobalDBは、どこからでも利用できるようになります。

+0

私は何かの言い訳が来た場合私は言っている.... thanku @マイケル –

+0

私のテーブルは、アプリケーションの代理人でなければならない私は他のビューコントローラでそのデータを取得する必要がありますか? –

+0

彼が意味するのは、モデル(データ)をビューとコントローラから分離することです。データとデータコントローラは、あなたがtableViewとは別のファイルにあり、あなたのtableViewはコントローラからのデータを要求して自分自身のビューを表示します。 – Emptyless

0

次のViewControllerにデータをプッシュしたい場合、マイケル氏は正しいと言いますが、セグを使用してください。あなたの第二のビューコントローラのクラス名に

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "YourIdentifier" { 
     if let vc = segue.destinationViewController as? SecondViewController { 
      vc.database = self.contactDB 
     } 
    } 
} 

変更as? SecondViewControllerとに"your identifier"を変更します。

あなたはSecondViewController内のデータを保持する変数を作成する場合:

var database : FMDatabase? 

とあなたのprepareForSegueでセカンドビューコントローラに切り替えるために使用するセグメント識別子。 1つのセグが使用されている場合よりもそれが必要ではないが、使用することが望ましい習慣である。

+0

私の質問を理解していません –

+0

実際に私は私のアプリケーションデリゲートマイケルによると、他のView Controllerのラベルやテキストフィールドでデータを取得したいのですが、どうすればいいですか? –

+0

以前のView Controllerで取り込んだデータを表示するように特に頼んでいました。 – Emptyless

関連する問題