2011-10-11 2 views
-2

형식이 문자열 리터럴이 아니며 형식 인수가 없습니다. 컴파일 오류가 발생했습니다.형식이 문자열 리터럴이 아니며 형식 인수가 없습니다.

여기에 내 코드 내가있는 NSMutableArray를 추가하기 위해 노력하고있어

입니다.

for (int i=0; i<feed.count; i++) { 
    [html appendFormat:[self.itemName objectAtIndex:i]]; } 

누군가 나를 도와 줄 수 있습니까?

+1

하지 자세한 내용은없이

그래서, 당신은이 같은 appendFormat:을 사용할 수 있습니다. 'feed'는 어떤 타입입니까? 'html'은 어떤 타입입니까? 'itemName'은 어떤 타입이고 객체는 어떤 타입입니까? 우리가하는 일을 이해하기 시작하는 데 필요한 모든 세부 사항을 알려주십시오. – PengOne

+2

@ PengOne : 그 유형이 꽤 분명하다고 생각합니다.'feed'는 어떤 종류의 콜렉션 (NSArray) 일 가능성이 높으며, html은 NSMutableString이고, itemName은 콜렉션의 일종 인 NSArray입니다. –

+1

@ Kevin : "NSMutableArray를 추가하려고합니다."라는 문구는이 점을 명확히하지 않습니다. 게다가,이 정보를 철자하는 것이 좋은 습관입니다 (그리고 OP가이 작업을 해본 결과 아마도 자신의 질문에 대답 할 수 있었을 것입니다). – PengOne

답변

2

appendFormat : 메소드에는 첫 번째 매개 변수로 문자열이 필요합니다. 객체가 직접하지

[html appendString:[[self.itemName objectAtIndex:i] description]]; 

나는 경우에 description 메시지를 추가 : 당신이 직접 문자열을 추가 할 수

[html appendFormat:@"%@", [self.itemName objectAtIndex:i]]; 

비록 :

그래서 보내는 당신의 선택은 뭔가를해야합니다 문자열, 흥분되는 것.

+0

도움 주셔서 감사합니다. 그것은 효과가있다! – HardCode

+0

그렇다면 답을 받아들이십시오.이게 당신이 원하는 것입니다 :) – Geoffroy

+0

그래, 알다시피 stackoverflow는 대답을 즉시 받아들이지 못하게합니다! 대답을 받아들이려면 적어도 10 분을 기다려야합니다. – HardCode

3

변수를 형식 문자열로 사용하여 -appendFormat:을 호출하려고합니다. 형식 지정자 (기본적으로 "%" 다음에 다른 문자가 오는 순서)가 있으면 -appendFormat:은 제공하지 않은 varargs의 다음 인수를 읽으므로 결과적으로 매우 나쁜 생각입니다. 스택에서 가비지 메모리를 읽고 삽입하려고합니다. 기껏해야, 이것은 충돌이 될 것입니다. 최악의 경우 보안 공격에 사용되는 벡터입니다.

대신 -appendString:을 사용해야합니다.

참고로 [self.itemName objectAtIndex:i]NSString*입니다. 다른 항목 인 경우 설명 대신 해당 설명을 추가 할 수 있습니다. [html appendFormat:@"%@", [self.itemName objectAtIndex:i]]이거나 정확한 유형에 따라 다른 것을 추가 할 수 있습니다.

+0

지적 해 주셔서 감사합니다. 나는 그 옵션을 시도 할 것이다. – HardCode

2

이 코드는 무엇을하기로되어 있습니까? -[NSMutableString appendFormat:]@"The %@ says %@"과 같이 format string을 취하고 나머지 인수로 "공백을 채 웁니다."

거의 사용되지 않는 형식 지정자 중 일부는 프로그램의 정보를 공개하거나 프로그램을 크래시 (예 : uncontrolled format string attack) 할 수 있다는 점에서 위험합니다. 이 때문에

(및 형식 문자열이 변수의 정보를 조립하기위한 것입니다 때문에), 당신은 항상은 형식 문자열 자체가 아닌 변수 또는 배열에서, 리터럴 문자열되고 싶어요. 그냥 대신 appendString:를 사용할 수

for (int i=0; i<feed.count; i++) { 
    [html appendFormat: @"%@", [self.itemName objectAtIndex:i]]; } 

을 또는 :

for (int i=0; i<feed.count; i++) { 
    [html appendString:[self.itemName objectAtIndex:i]]; } 
관련 문제