2016-10-23 2 views
0

에서 NSMutableDictionary를 저장 정수 사실, 난 NSMutableDictionary 무엇인지 전혀 모른다, 그러나 나는 빠른 2.3 엑스 코드 (8)을 사용하여, 나는 그런데 그Swift2.3 : SQLite는

필요 보인다.

정수를이 arry에 sqlite에서 추가하고 있는데 오류가 있습니다. 다른 하나는 모두 문자열이므로 여기서는 문제가되지 않습니다.

그런 오류는 여기

http://imgur.com/a/Gbrp0

let recipeIsFavor = sqlite3_column_int(statement, 3) 
let recipe_isFavor = Int.fromCString(UnsafePointer<CInt>(recipeIsFavor)) //<--------I wnat to use int here, but I have no idea. 

이 코드를 편집하려면 어떻게해야합니까? 이 오류가 사라질 수 있기를 바랍니다.

func loadData() { 

    let db_path = NSBundle.mainBundle().pathForResource("Recipes", ofType: "db") 
    var db = COpaquePointer() 
    let status = sqlite3_open(db_path!,&db) 
    if (status == SQLITE_OK) { 
     print("Open the sqlite success!\n") 
    }else { 
     print("Open the sqlite failed!\n") 
    } 

    let query_stmt = "SELECT * FROM recipe" 
    if(sqlite3_prepare_v2(db , query_stmt, -1, &statement, nil) == SQLITE_OK) { 
     self.data.removeAllObjects() 
     while (sqlite3_step(statement) == SQLITE_ROW) { 
      let recipeArray = NSMutableDictionary() 

      let recipeName = sqlite3_column_text(statement, 0) 
      let recipe_name = String.fromCString(UnsafePointer<CChar>(recipeName)) 

      let recipeType = sqlite3_column_text(statement, 1) 
      let recipe_type....... 

      let recipeImage = sqlite3_column_text(statement, 2) 
      let recipe_image....... 

      let recipeIsFavor = sqlite3_column_int(statement, 3) 
      let recipe_isFavor = Int.fromCString(UnsafePointer<CInt>(recipeIsFavor)) //<--------I wnat to use int here, but I have no idea. 

      let recipeUserPhoto = sqlite3_column_text(statement, 4) 
      let recipe_userPhoto.... 

      let recipeUserName = sqlite3_column_text(statement, 5) 
      let recipe_userName....... 

      recipeArray.setObject(recipe_name!, forKey: "recipeName") 
      recipeArray.setObject(recipe_type!, forKey: "recipeType") 
      recipeArray.setObject(recipe_image!, forKey: "recipeImage") 
      recipeArray.setObject(recipe_isFavor!, forKey: "recipIsFavor") 
      recipeArray.setObject(recipe_userPhoto!, forKey: "recipUserPhoto") 
      recipeArray.setObject(recipe_userName!, forKey: "recipUserName") 

      data.addObject(recipeArray) 
     } 

     sqlite3_finalize(statement) 
    }else { 
     print("read the sqlite data failed") 
    } 

} 

답변

0

sqlite3_column_int()는 스위프트의 Int32 인 "C 정수"를 반환합니다. 당신은 또한 [String: AnyObject] (스위프트 3 또는 [String: Any]), 다음 유형의 신속한 사전의 배열을 사용할 수 있습니다 NSMutableArray 대신 NSMutableDictionary 단지

let recipeIsFavor = sqlite3_column_int(statement, 3) 
let recipe_isFavor = Int(recipeIsFavor) 

를 사용 Int에 그 변환에 다음과 같이 보일 것입니다 :

var data: [[String: AnyObject]] = [] 

let query_stmt = "SELECT * FROM recipe" 
if sqlite3_prepare_v2(db , query_stmt, -1, &statement, nil) == SQLITE_OK { 
    data = [] 
    while (sqlite3_step(statement) == SQLITE_ROW) { 
     var dict: [String: AnyObject] = [:] 

     let recipeName = sqlite3_column_text(statement, 0) 
     let recipe_name = String.fromCString(UnsafePointer<CChar>(recipeName)) ?? "" 

     let recipeIsFavor = sqlite3_column_int(statement, 3) 
     let recipe_isFavor = Int(recipeIsFavor) 

     // ... 

     dict["recipeName"] = recipe_name 
     dict["recipIsFavor"] = recipe_isFavor 
     // ... 

     data.append(dict) 
    } 
    sqlite3_finalize(statement) 
} else { 
    print("read the sqlite data failed") 
} 
+0

효과가 있습니다! Thans ver much! – HarryHuang