2016-10-23 3 views
-1

데이터 저장을 위해 sqlite를 사용하려고합니다.Swift2.3 : "치명적인 오류 : 인덱스가 범위를 벗어났습니다"와 sqlite 배열 오류

그리고 난 그냥 기능 코드

if segmentControl.selectedIndex == 0 { 
     let recipe = recipes[indexPath.row] 
     let aux:AnyObject = data[indexPath.row] 

     let table_recipeName = aux["recipeName"] 
     cell.nameLabel.text = table_recipeName as? String 

     let table_recipeType = aux["recipeType"] 
     cell.typeLabel.text = table_recipeType as? String 

     let table_recipeImage = aux["recipeImage"] 
     cell.thumbnailImageView.image = UIImage(named: table_recipeImage as! String) 

     let table_recipeIsFavor = aux["recipeIsFavor"] 
     cell.favorIconImageView.hidden = !recipe.isFavor 

     let table_recipeUserPhoto = aux["recipeUserPhoto"] 
     cell.userPhoto.image = UIImage(named: table_recipeUserPhoto as! String) 

     let table_recipeUserName = aux["recipeUserName"] 
     cell.userName.text = table_recipeUserName as? String 


    } 

와 sqlite가 기능 이상 chenge 여기

//**********************SQLite********************************// 
var statement = COpaquePointer() 
var data: [[String: AnyObject]] = [] 

func loadData() { 
    let db_path = "/Users/huangpinquan/Desktop/Recipes/Recipes/Recipes.sqlite" 
    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 WHERE type:'麵食' " 
    //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) { 
      var recipeArray: [String: AnyObject] = [:] 

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

      let recipeType = sqlite3_column_text(statement, 1) 
      //....just like "statement, 0" 

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

      let recipeIsFavor = sqlite3_column_int(statement, 3) 
      //.... 

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

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

      recipeArray["recipeName"] = recipe_name 
      recipeArray["recipeType"] = recipe_type 
      recipeArray["recipeImage"] = recipe_image 
      recipeArray["recipIsFavor"] = recipe_isFavor 
      recipeArray["recipeUserPhoto"] = recipe_userPhoto 
      recipeArray["recipeUserName"] = recipe_userName 

      data.append(recipeArray) 
     } 

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

} 

때 "FUNC loadData"

let query_stmt = "SELECT * FROM recipe WHERE type:'麵食' " 

을이 같은 코드 오류가 발생합니다

,210

fatal error: Index out of range

그러나이 같은 코드, 그것은 오류

let query_stmt = "SELECT * FROM recipe" 

http://imgur.com/a/x3lr1

당신이 원하는 경우, 내 전체 코드의이없는 경우.

https://gist.github.com/anonymous/79eb4b2506889929cfe92dfcab3731c4

이 오류를 해결하기 위해 어떻게해야합니까?

+0

어디서이 오류가 발생합니까? 어느 선 에서요? –

+2

FYI - 절대로 SELECT * ...를 사용하지 마십시오. 선택할 열을 명시 적으로 나열하십시오. – rmaddy

+0

오류는 "let aux : anyObject = data [indexPath.row]" – HarryHuang

답변

0

오류가 발생한 위치를 알지 못해서 진술이 컴파일되는지 궁금합니다. 나는 SQL 전문가가 아니지만 "WHERE type:'...'"는 의심스러워 보입니다. 먼저이 필드를 recipeType이라고하고 두 번째로 "WHERE recipeType='string literal'"을 사용 하시겠습니까?

+0

http://imgur.com/a/20mko 라인에 있지만 SQLite의 명령어에는 아무런 문제가 없으며 그 이유는 무엇입니까? 빠른? – HarryHuang

+0

나는 많은 정보를 제공하지 않고있다. 오류 줄에 중단 점을 추가하면 데이터 객체의 상태는 무엇입니까 (개수는 무엇입니까?) indexPath.row의 값은 무엇입니까? –

+0

https://gist.github.com/anonymous/79eb4b2506889929cfe92dfcab3731c4 여기 내 코드 – HarryHuang

관련 문제