2016-11-15 15 views
0

シングルトンを使用してSQLiteデータベースのすべてのデータを迅速に取得しようとすると、sharedInstanceにエラーが発生し、ゼロの結果がフェッチされます。ここでシングルトンのエラーSQLite Swift

私のコードです:

DatabaseManager.swift

import SQLite 

class DatabaseManager { 


    let shareInstance = DatabaseManager() 
    let recipeTable = Table("recipes") 
    let id = Expression<String>("id") 
    let title = Expression<String>("title") 
    let category = Expression<String>("category") 
    let recipe = Expression<String>("recipe") 
    let bookmark = Expression<String>("Bookmark") 

    let db: Connection = { 
     let path = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).first! 
     return try! Connection("\(path)/recipe.sqlite") 
    }() 

    func findAll() -> Array<foodRecipe>{ 
     var foodRecipeArray = [foodRecipe]() 

     do{ 
     //for row in try db.prepare(recipeTable.select(id,title,recipe,category,bookmark).filter(category == "appetizers")){ 
     for row in try shareInstance.db.prepare(recipeTable){ 
      let fd = foodRecipe() 
      fd.id = row[id] 
      fd.title = row[title] 
      fd.recipe = row[recipe] 
      fd.category = row[category] 
      fd.bookmark = row[bookmark] 
      foodRecipeArray.append(fd) 
     } 

     } 
     catch let error as NSError { 
      print("Error: \(error.description)") 
     } 
     return foodRecipeArray 
    } 
} 

AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    var foodRecipeArray: [foodRecipe] 

    let dbMngr: DatabaseManager = DatabaseManager() 

    foodRecipeArray = dbMngr.findAll() 

    print("Food Recipe Array Count: \(foodRecipeArray.count)") //return 0 


    print("Food Recipe Array: \(foodRecipeArray)") //result nil 


    // Override point for customization after application launch. 
    return true 


} 

答えて

2

シングルトンとして使用される共有インスタンスがstatic

なければなりません
static let shareInstance = DatabaseManager() 
+0

Bad_Execエラーコード2は解決されましたが、まだ空の配列を取得しません!感染接続が正常に行われ、sharedInstanceポイントでデバッグします。すべてのレコードをフェッチしますが、ループを反復した後にデータはありません。 –