2011-11-26 5 views
0

여기 내 코드에서 ROBOTS.TXT 파일을로드하고 "허용 안 함"문자열로 필터링하려고합니다. 그런 다음 해당 줄에 "문자열 허용 안함"이 있으면이 문자열을 삭제하고 나머지 줄을 반환합니다. 여기 NSString에서 Characters를 삭제하는 중 오류가 발생하는 이유는 무엇입니까?

robots.txt에

User-agent: *

Disallow:/search

Disallow: /groups

Disallow: /images

Disallow: /catalogs

Allow: /catalogs/about

Disallow: /catalogues

Disallow: /news

Allow: /news/directory

샘플이고, 여기서 I는이 코드이다

NSRange range; 
NSURL *url=[NSURL URLWithString:@"http://www.google.com/robots.txt"]; 

NSString *content = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; 

NSArray *parsed = [content componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 

NSMutableArray *robots=[[[NSMutableArray alloc] init] autorelease]; 

NSMutableString *line= [[[NSMutableString alloc] init] autorelease]; 


for(line in parsed){ 
    range=[line rangeOfString:@"Disallow"]; 
    if (range.location != NSNotFound) { 
     [line deleteCharactersInRange: NSMakeRange(1,9)]; 
     [robots addObject:line]; 

    } 
} 

을 여기 에러이다

* Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to mutate immutable object with deleteCharactersInRange:'

+0

참고;'더 명확하고 간단하게 기록 될 수 있습니다 :'[NSMutableArray를 배열]'편익 방법이 도움이 될 수 있습니다 깨끗한 코드를 작성하고 ARC 및 비 ARC 코드에서 사용할 수 있습니다. – zaph

+0

http://stackoverflow.com/questions/1242335/categories-for-nsmutablestring-and-nsstring-causing-binding-confusion이 질문은 귀하의 질문과 관련이있을 수 있으며 귀하의 질문에 대한 답변 일 수 있습니다. 희망이 도움이 – BWC

답변

0

for(line in parsed)의 변수 line은 for-in 문 구성에 의해 NSString이 반환되므로 변경할 수 없습니다. 아마

당신이 필요`[[[있는 NSMutableArray의 ALLOC] 초기화] 오토 릴리즈 즉

for(NSString *line in parsed) { 
    if [line hasPrefix:@"Disallow"]) { 
     [robots addObject:[line substringFromIndex:9]; 
    } 
} 
+0

완벽하게 작동합니다, 감사합니다 :) –

0

있어서 componentsSeparatedByCharactersInSet은 NSString의 NSArray를 반환합니다. NSString은 변경할 수 없습니다. 줄을 NSMutableString으로 선언하고 있지만 줄에 할당 된 객체는 여전히 NSString입니다.

관련 문제