2013-05-21 5 views
0

테이블에 값 배열을 삽입하는 데 문제가 있습니다. 연락처 세부 정보 배열을 테이블에 삽입했습니다. 즉, 첫 번째 등 변수, 변수에 마지막으로 이름 목록에서 이름은 .. 마찬가지로 나는테이블에 값 배열 삽입하기

그것은 말하는 예외가 발생합니다 .. 삽입 될 24 개 컬럼했습니다 : 인해 응용 프로그램을 종료

*** 'NSInvalidArgumentException', 이유 : '- [contactlist filepath] : 인스턴스 0xa2af5b0로 전송 된 인식 할 수없는 셀렉터'*** 우선 스택 호출 : (0x257e012 0x1e06e7e 0x26094bd 0x256dbbc 0x256d94e 0x4b613 0x4b551 0x190c589 0x190a652 0x190b89a 0x190a6 0D 0x190a785 0x1857a68 0x4a0911 0x49fbb3 0x4ddcda 0x25208fd 0x4de35c 0x4de2d5 0x3c8250 0x2501f3f 0x250196f 0x2524734 0x2523f44 0x2523e1b 0x2ad57e3 0x2ad5668 0xd4affc 0x254d 0x2475)의 libC++ abi.dylib :

이 사람이 나를 도울 수

예외를 던지는라고 종료 ..?

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 

    NSError *error; 
    json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; 
    NSLog(@"json.... %@",json); 


    id jsonObject = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:nil]; 

    NSLog(@"jsonObject=%@", jsonObject); 

    NSArray *checkArray=[jsonObject valueForKey:@"ND"]; 



    cheDisk=[checkArray valueForKey:@"FN"]; 
    cheDisk1=[checkArray valueForKey:@"LN"]; 


    NSLog(@"FN =%@",cheDisk); 
    NSLog(@"LN =%@",cheDisk1); 

    fname = [NSString stringWithFormat:@"%@",[cheDisk objectAtIndex:0]]; 
    lname = [NSString stringWithFormat:@"%@",[cheDisk1 objectAtIndex:0]]; 

    [self insertData]; 

    [ContactTableview reloadData]; 

} 

-(void)insertData 

{ 
    if (sqlite3_open([[self filepath]UTF8String], &db) == SQLITE_OK) 
    { 

     NSString *insertStatement = [NSString stringWithFormat:@"INSERT INTO pu_Contacts (FirstName, LastName) VALUES ('%@', '%@')", fname, lname]; 

     char *error; 
     sqlite3_exec(db, [insertStatement UTF8String], NULL, NULL, &error)!= SQLITE_OK; 

     sqlite3_close(db); 

    } 
} 

+(NSString *) filepath { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDir = [paths objectAtIndex:0]; 
    return [documentsDir stringByAppendingPathComponent:@"UWdatabase1.sql"]; 
} 
+0

그래서'fname'과'lname'이 테이블에 삽입되지 않았습니까? 'char * error'가 말한 것은 무엇입니까? NSLog는 무슨 일이 일어나고 있는지보고 있습니다. – Malloc

+1

* contactlist에는'filepath'라는 메서드가 있습니까? – Larme

+0

예 .. 파일 경로를 얻으려면 .. 여기에 붙여 넣지 않았으므로 코드를 줄이십시오. – Mano

답변

0

문제는이 코드입니다 :

[self filepath] 

당신은 class method 같은 방법을 정의하는, 그래서 당신은 self를 사용하여 호출 할 수 없습니다.

+(NSString *) filepath 

해결 방법 1 :

변경 클래스 이름을 사용 [contactlist filepath]; 같은 호출.

해결 방법 2 :

변경 인스턴스 방법에있어서, 같은 :

- (NSString *) filepath 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDir = [paths objectAtIndex:0]; 
    return [documentsDir stringByAppendingPathComponent:@"UWdatabase1.sql"]; 
} 
+0

붙여 넣기 그 작동하지 않습니다 .. 아무도이 논리를 구현하는 자신의 코드를 올릴 수 있습니다 – Mano

+0

@ManojEllappan : 이제는 문제가 무엇입니까? 두 가지 해결책을 모두 시도 했습니까? –

0

클래스 이름은 무엇입니까? 클래스 메쏘드를 호출하기 위해서 클래스 이름으로 self을 변경하십시오 : if (sqlite3_open([[MyClassName filepath]UTF8String], &db) == SQLITE_OK)