2012-01-06 3 views
0

일요일부터 토요일까지의 값이있는 행이 7 개있는 tableview가있는 응용 프로그램이 있습니다. 일요일을 선택하고 저장하면 1이 내 데이터베이스에 입력됩니다. "일요일"과 "월요일"을 선택하면 해당 ID에 대해 1과 2가 입력됩니다. 이것은 제대로 작동하고 있습니다.SQLite 데이터베이스의 정수 값을 iPhone의 문자열 값으로 변환

이제 SQLite 데이터베이스에 입력 된 정수 값을 비교하여 textlabel에 문자열 값을 표시하려고합니다. 즉 특정 ID의 경우 데이터베이스에 1이 입력되면 텍스트 라벨에 "Sunday"가 표시되어야하고 데이터베이스에 1과 2가 입력되면 텍스트 라벨에 "Sunday"와 "Monday"가 표시되어야합니다.

나는 이것을위한 코드를 만들었지 만 문제는 "Sunday"와 "Monday"를 선택할 때 "Monday"만이 아니라 둘 다 textlabel에 표시됩니다. 또 다른 문제점은 값이 모든 셀에 표시된다는 것입니다.

이 내가 여기에 내가 내 셀에

cell.mRepeatLbl.text = [NSString stringWithFormat:@"%@",str_label]; 

//을 표시하려면이 코드를 wriiten 한 내가 cellForRowAtIndexPath에서 ID

-(void)selectDaysFromDatabase 
{ 
    appDelegate = (StopSnoozeAppDelegate*)[[UIApplication sharedApplication]delegate]; 
    NSString *filePath = [self getWritableDBPath]; 
    sqlite3 *database; 
    for (int i = 0; i<[appDelegate.alarmdaysarray count]; i++) 
    { 
    if (sqlite3_open([filePath UTF8String], &database) ==SQLITE_OK) 
    { 


       NSString *query =[NSString stringWithFormat:@"select alarm_days from AlarmDays where alarm_id =%@",[appDelegate.alarmdaysarray objectAtIndex:i]]; 

     const char *sql = [query cStringUsingEncoding:NSUTF8StringEncoding]; 
     sqlite3_stmt *selectstmt; 
     if (sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) ==SQLITE_OK) 
     { 

      while (sqlite3_step(selectstmt) ==SQLITE_ROW) 
      { 

       WEEKDAY_INTVALUE =[NSNumber numberWithInt:(int)sqlite3_column_int(selectstmt, 0) ]; 
       [daydisplayarray addObject:WEEKDAY_INTVALUE]; 
       for(int i = 0;i<[daydisplayarray count];i++) 
         { 
          str_label [email protected]""; 
          int val = [[daydisplayarray objectAtIndex:i]intValue]; 


          if (val==0) { 
           NSString *str = @"SUN"; 
           str_label = [str stringByAppendingString:@"SUN"]; 
          } 
          if (val==1){ 
           str_label =[str_label stringByAppendingString:@"MON"]; 
          } 
          if(val==2){ 
           str_label =[str_label stringByAppendingString:@"TUE"]; 

          } 
          if(val==3) 
          { 
           str_label =[str_label stringByAppendingString:@"WED"]; 

          } 
          if(val==4) 
          { 
           str_label =[str_label stringByAppendingString:@"THU"]; 

          } 
          if(val==5) { 
           str_label =[str_label stringByAppendingString:@"FRI"]; 

          } 
          if(val==6) 
          { 
           str_label =[str_label stringByAppendingString:@"SAT"]; 

          } 



        } 


      } 



     } 


    else { 
     sqlite3_close(database); 
    } 
    } 
    } 

} 

에 따라 데이터베이스에서 값을 가져 오는하고 내 코드입니다 내 str_label을 직접 셀에 설정합니다. 문제는 이드와 관계없이 셀에 값이 설정된다는 것입니다.

+0

몇 가지 코드가 도움이 될 것입니다 ... : | –

+0

@AnkitSrivastava 코드 – Rani

+0

을 편집 할 수 있습니다. –

답변

0

setString 또는 setText를 호출 할 때마다 ui 요소의 텍스트가 대체됩니다. 당신은 문자열, 예를 들어 월요일을 추가해야하는 경우, 당신은 당신은 당신의 변수와 출구가 하나 하나에이 있는지 확인하시기 바랍니다 수있는 여러 세포에서 업데이트되는 값으로

[uxTextField setString:[[uxTextField stringValue] stringByAppendingString:@" Monday"]; 

같은 것을 수행해야합니다 매핑?

+0

Fletch 코드를 편집했습니다. – Rani

0

str_label [email protected]"";는 같은

+0

을 확인하십시오.하지만 루프 외부에서 str_label을 가져온 후 ankit은 [CFString respondsToSelector :] : 메시지를 할당 취소 된 인스턴스에 전송합니다. 0x619c770 – Rani

0

str_label [email protected]"";

당신이 날은 목적을 이해하는 데 도움 주실 래요 .. while 루프 이상이어야합니다 .. @""에 다시 다시 초기화 ... 루프에서해야 ForLoop 내부에있는 동안?

while 루프를 사용하지 않고 동일한 작업을 수행 할 수 있으므로 while 루프가 이미 있으므로.

그 경우 (값 == x)의 스파게티 코드를 제거하기 :

따라서 귀하의 while 루프는

str_label [email protected]""; 

while (sqlite3_step(selectstmt) ==SQLITE_ROW) 
{ 
    WEEKDAY_INTVALUE =[NSNumber numberWithInt:(int)sqlite3_column_int(selectstmt, 0) ]; 
    [daydisplayarray addObject:WEEKDAY_INTVALUE]; 
    int val = WEEKDAY_INTVALUE; 

    if (val==0) { 
     NSString *str = @"SUN"; 
     str_label = [str_label stringByAppendingString:@"SUN"]; 
    } 
    if (val==1){ 
     str_label =[str_label stringByAppendingString:@"MON"]; 
    } 
    if(val==2){ 
    str_label =[str_label stringByAppendingString:@"TUE"]; 
    } 
    if(val==3) 
    { 
    str_label =[str_label stringByAppendingString:@"WED"]; 
    } 
    if(val==4) 
    { 
    str_label =[str_label stringByAppendingString:@"THU"]; 
    } 
    if(val==5) { 
    str_label =[str_label stringByAppendingString:@"FRI"]; 
    } 
    if(val==6) 
    { 
    str_label =[str_label stringByAppendingString:@"SAT"]; 
    } 
} 
+0

실제로 daydisplayarray 내에서 반복되고 있습니다. 데이터베이스에서 배열 – Rani

+0

에 추가되고있다하지만 그들은 동일한 while 루프에 추가되고있다 .. 당신은 내가했던 것처럼 for 루프를 제거합니다 .. 또는 while 루프 밖에서 foor 루프를 구현하십시오 .. 일단 디스플레이 배열에 추가하면 done .. –

+0

나는 말했듯이했는데 문제는 내 값이 appended.ie를 얻지 못한다는 것입니다. 특정 id에 대한 데이터베이스에서 1과 2가 일요일과 월요일에 textlabel을 표시해야한다는 데이터베이스에 저장되어 있지만 표시 만하는 경우 월요일, 월요일 – Rani

0

제안을 따라야한다. 요일 이름은 NSString 값으로 채워진 정적 NSArray를 사용하고 올바른 날짜 문자열을 얻으려면 인덱스를 사용하십시오. 비 컴파일 샘플 코드 :

- (NSString *)weekName:(NSUInteger *)index 
{ 
static NSArray *nameArray = nil; 
if (!nameArray) { 
    nameArray = [[NSArray alloc] initWithObjects: 
       @"empty on purpose since you use 1 for Sunday", 
       @"Sunday", @"Monday", @"Tuesday", @"Wednesday", 
       @"Thursday", @"Friday", @"Saturday", 
       nil]; 
} 
return [nameArray objectAtIndex:index]; 
} 

모든 사람이 말했듯이 'str_label = @ ""; for 루프마다 @ ""(empty) 문자열을 재설정합니다. 빈 문자열에는 아무 것도 추가 할 필요가 없습니다. 코드는 이상한, 너무 많은 정의되지 않은 (전역) 변수를 보이지만, 이런 일이 할 수있는 것 같아요 :

NSMutableArray *a = [NSMutableArray arrayWithCapacity:7]; 
for (int i=0; i<[daydisplayarray count]; i++) 
{ 
    NSInteger index = [[daydisplayarray objectAtIndex:i] intValue]; 
    [a addObject:[self weekName:index]]; 
} 
str_label = [a componentsJoinedByString:@", "]; 
if (!str_label) str_label = @"Nothing found!"; 

Btw는 값이 때문에 'cellForRowAtIndexPath'에서 당신 코드의 모든 셀에 표시됩니다.셀을 재활용했는지 확인하고 재활용 된 셀의 텍스트 값을 다시 설정하십시오.

+0

어디에서이 코드를 불러야합니까? – Rani

+0

샘플로 업데이트되었습니다. 어떻게 std_label에 – JOM

+0

, null이 전달되고 있는지를 코드 – Rani

관련 문제