2012-07-30 8 views
0

SQLite DB에서 행을 가져와 사전에 삽입하려고합니다. 나는 오류가 계속 발생하는 것을 제외하고는! 나는 "const id * '에 대한 Objective-C 포인터의 암시 적 변환을 ARC와 함께 허용하지 않습니다."내가 알고있는 것은 사전에 객체를 추가 할 때 포인터를 사용할 수 없다는 것을 의미합니다. 그렇다면이 배열을 사전에 추가 할 수 있도록 수정하는 방법은 무엇입니까?배열에서 사전에 객체 추가

NSArray *keyArray = [[NSMutableArray alloc] init ]; 
    NSArray *valueArray = [[NSMutableArray alloc ] init ]; 
    NSDictionary* dic; 
    NSInteger dataCount = sqlite3_data_count(statement); 
    while (sqlite3_step(statement) == SQLITE_ROW) { 
     @try { 
      for (int i = 0; i < dataCount; i ++) 
      { 
       NSString* key = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, i)]; 
       NSString *value = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, i)]; 

       if ([value length] == 0) 
       { 
        value = @""; 
       } 

       keyArray = [keyArray arrayByAddingObject:key]; 
       valueArray = [valueArray arrayByAddingObject:value]; 

      } 

     } 
     @catch (NSException *ex) 
     { 
      NSLog(@"%@,%@", [ex name], [ex reason]); 
     } 

     dic= [NSDictionary dictionaryWithObjects:valueArray forKeys:keyArray count:[keyArray count]]; 
+2

NSMutableArrays를 사용하지 않는 이유는 무엇입니까? 그리고 당신의 오류는 어디에 정확히 있습니까? – ohr

+1

어떤 라인에서 오류가 발생합니까 –

+0

'0' 길이 문자열은 이미'@ ""'이며 값을 확인할 필요가 없습니다. 'NULL'을 검사하고 있다면'stringWithUTF8String :'이'NULL' 값에 충돌하기 때문에'sqlite3_column_text'의 값을 검사 할 필요가 있습니다. – Joe

답변

5

dictionaryWithObjects:forKeys:count:는 C 스타일 배열이 아닌 NSArray 오브젝트를합니다. dictionaryWithObjects:forKeys:이 트릭을 수행 할 수도 있지만, NSArray을 완전히 우회하여 변경 가능한 사전을 만드는 것이 더 나을 수 있습니다.

NSDictionary* dic; 
NSMutableDictionary *tmp = [NSMutableDictionary dictionary]; 

for (int i = 0; i < dataCount; i ++) 
{ 
    NSString* key = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, i)]; 
    NSString *value = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, i)]; 
    [tmp setObject:value forKey:key]; 
} 
dict = tmp; 
+2

'dictionaryWithObjects : <# (NSArray *) #> forKeys : <# (NSArray *) #>'는 NSArrays를 사용합니다. – ohr

+0

@OscarHernandez이 문제를 제기 해 주셔서 대단히 감사합니다. 답변을 업데이트했습니다. 감사! – dasblinkenlight

+0

당신의 대답이 정확하기 때문에 그것에 nitpick 수 있습니다! 불필요하므로'[value length]'체크를 제거하십시오. 위 내 의견을 참조하십시오. – Joe

0

[dicBodyPost setValue : arrContactAddress forKey : @ "contactAddress"];