2009-08-05 4 views
0

안녕하세요, Objective-C/iPhone 개발에 관해서는 완전히 멍청한 사람입니다.Objective-C NSString : 로깅 할 때 이상한 문자

SQLite DB에서 텍스트를 가져 오려고합니다.

while(sqlite3_step(selectstmt) == SQLITE_ROW) { 

을 그리고 그 루프 내에서 잘 로그이 인쇄 :

NSLog(@"Text: %s",sqlite3_column_text(selectstmt, 1)); 

이 작동하지 않습니다

Category *categoryObj = [[Category alloc] initWithPrimaryKey:primaryKey]; 
categoryObj.categoryName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)]; 
NSLog(@"cat name: %s",categoryObj.categoryName); 

I는 다음과 같습니다 while 루프가 위를 실행하고 내가 본 로그를 봅니다.

cat name: ‡}00å 

필자는 라벨을 필드에 써 넣으려고했는데, NSLog에 특정한 것일지도 모른다고 생각했지만 아무 것도 나타나지 않았습니다. 분명히 나는 ​​근본적인 것을 놓치고 있지만 나는 그것이 무엇인지에 대한 손실에 처해있다.

답변

12

%s 대신 %@으로 문자열을 기록하면 문제가 없습니다. NSString은 문자에 대한 포인터가 아니며 본격적인 개체이므로 로그 형식 문자열에 "object"자리 표시자를 사용해야합니다.

이것은 비 ASCII 문자열과 NSString이주는 다른 중요한 모든 것들을 올바르게 처리 할 수 ​​있다는 장점이 있습니다.

NSString을 생성하는 대신 직접 SQLite에서 결과를 기록한 경우 %s이 올바른 것입니다.

기억 : %s은 C 문자열 용이고 %@은 Objective-C 개체 용입니다.