2012-11-14 2 views
0

여러 가지 유형의 여러 열이있는 표에 값 모음을 저장하고 iPhone 시뮬레이터에서 앱을 실행하면 삽입 및 선택이 올바르게 작동합니다. 그러나 실제 장치에서 실행하고 데이터를 선택할 때 테이블의 일부 텍스트 열을 가져 오지 못하는 것 같습니다 (나머지 열은 올바르게 검색되는 것 같습니다). 문자열이있는 대화 상자가 표시되어야하는 곳에서는 빈 대화 상자가 표시되는 반면 문자열이있는 대화 상자는 시뮬레이터에 올바르게 표시되었습니다. 내가 가진 (SQLite3 선택은 시뮬레이터에서 작동하지만 장치에는 없습니다

if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) { 
     while(sqlite3_step(compiledStatement) == SQLITE_ROW) { 
      UserData *userData = [[UserData alloc] init]; 

      userData.ID = sqlite3_column_int(compiledStatement, 0); 

      char *name = sqlite3_column_text(compiledStatement, 1); 
      if (name == nil) 
       userData.Name = @""; 
      else 
       userData.Name = [NSString stringWithUTF8String: name]; 

      [list addObject:userData]; 
     } 
    } 
    sqlite3_finalize(compiledStatement); 
} 
sqlite3_close(database); 

나는 데이터베이스 데이터 관리 시뮬레이터에서 잘 작동하고 왜 전혀 생각이 없다 :

는 삽입에 대한 코드입니다 :

if(sqlite3_prepare_v2(database, sqlStatement, 
          -1, &compiledStatement, NULL) == SQLITE_OK) 
    { 
     sqlite3_bind_int(compiledStatement, 1, userData.ID); 
     sqlite3_bind_double(compiledStatement, 2, userData.Location.Lat); 
     sqlite3_bind_double(compiledStatement, 3, userData.Location.Lon); 
     sqlite3_bind_text(compiledStatement, 4, [userData.Name UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(compiledStatement, 5, [userData.Surname UTF8String], -1, SQLITE_TRANSIENT); 
    } 

    if(sqlite3_step(compiledStatement) == SQLITE_DONE) { 
     sqlite3_finalize(compiledStatement); 
    } 
    else { 
     NSLog(@"%d",sqlite3_step(compiledStatement)); 
    } 
} 
sqlite3_close(database); 

그리고 이것은 선택이다 SQLite Manager 플러그인과 데이터는 올바르게 저장되고 검색됩니다.), 실제 iPhone에는 없습니다. 기기에서 무슨 일이 일어나는지 어떻게 확인할 수 있습니까? 누군가 비슷한 경험을 했습니까?

감사합니다.

+0

SQL 요청 표시 – Oleg

+0

두 번째 코드 조각에는 두 개의 열린 중괄호 "{"및 세 개의 "close"}가 있으므로 모든 연결 방법이 확실하지 않습니다. 어쨌든 여기에 잘 작동하는 코드의 스 니펫이 있습니다. char * localityChars = (char *) sqlite3_column_text (statement, 1); if (localityChars == NULL)이면 FALSE를 반환합니다. , 바인딩 텍스트에 관해서는, 당신은 그것을하는 나의 애플 리케이션과 다르다 : sqlite3_bind_text (stmt, 4, [myString UTF8String], -1, NULL); – Chris

답변

0

나는 마침내, 작업의 모든 조언에 따라, 나는이 해결 어떻게 생각 있어요 결국 문제는 대소 문자를 구분하는 것이 었습니다. u 모두에게 감사합니다

+0

나는 내가 옳았다는 소식을 듣고 기쁘다. – TonyMkenu

0

나는 문제가 비어 기록에 의해 발생할 수 있습니다 및 if nil, 도움말 대신 NULL을 시도하지 않습니다 생각 :

if ((char *)sqlite3_column_text(compiledStatement, 1) == NULL) 
userData.Name = @""; 
+1

이상한, 별난 .. 장치에서 앱을 삭제/재설치하고 테이블 이름과 필드 이름을 다시 확인하십시오 (장치에서 대소 문자를 구분 함). 진행 상황을 알려주십시오. 행운을 빕니다! – TonyMkenu

관련 문제