2012-11-25 5 views
1

하나 내지 네 개의 객체가있는 NSMutableDictionary가 있습니다. 포함 된 각 객체는 NSDictionary입니다. 첫 번째 사전은 NSManagedObjects에 대한 약 83,000 개의 참조를 포함합니다. 두 번째 사전에는 약 14,000 개의 동일한 유형의 객체가 포함됩니다.NSMutableDictionary에 대한 설명을 기록 할 수 없습니다.

아래 코드에서 NSLog 문에 아무 것도 발생하지 않습니다. 마치 건너 뛰고 프로그램이 계속 실행됩니다. 그러나 나는 곧이 사전들에 다른 문제들을 가지고있다. 이 문제를 해결하면 나머지 문제를 밝힐 수 있을지도 모른다고 생각했습니다.

pos = @"v"; 
NSLog(@"%@", pos); 
[request setEntity:[NSEntityDescription entityForName:@"SYNSET" inManagedObjectContext:[ManagedObjectContext moc]]]; 
predicate = [NSPredicate predicateWithFormat:@"partOfSpeech = %@", pos]; 
[request setPredicate:predicate]; 
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"synsetOffset" ascending:YES]; 
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 
synsetsArrayForPos = [[ManagedObjectContext moc] executeFetchRequest:request error:&error]; 
synsetDictionaryMutableForPos = [[NSMutableDictionary alloc] initWithCapacity:100000]; 
for (SYNSET *synset in synsetsArrayForPos) 
    [synsetDictionaryMutableForPos setObject:synset forKey:[NSString stringWithFormat:@"%@",synset.synsetOffset]]; 
[dictionaryMutableOfSynsetDictionaries setObject:[NSDictionary dictionaryWithDictionary:synsetDictionaryMutableForPos] forKey:pos]; 

NSLog(@"dictionaryMutableOfSynsetDictionaries is class of %@ with description %@", [dictionaryMutableOfSynsetDictionaries class], [dictionaryMutableOfSynsetDictionaries description]); 

pos = @"a"; 
NSLog(@"%@", pos); 

나는 네 번 pos에 대해 다른 값을 제한적으로 견디는 코드, 때마다, dictionaryMutableOfSynsetDictionaries 사전 인쇄 실패 최상위 레벨의 설명을 인쇄하고 NSLog를 반복합니다. `[dictionaryMutableOfSynsetDictionaries description] '을 문자열 상수로 바꾸면 인쇄됩니다.

여기 무슨 일입니까? 이 예상되는 동작입니까 아니면 내가 잘못하고 있습니까?

(이 코드는 큰 사전과 함께 큰 sqlite 데이터베이스의 관계 링크를 완료하는 데 사용되며 배치 가능한 코드에는 사용되지 않습니다 .iOS 시뮬레이터에서만 실행하고 있습니다. 이 업데이트가 완료되면 업데이트 된 데이터베이스를 내 응용 프로그램 번들에 넣을 것입니다.)

답변

0

이제는 어떤 일이 벌어지는 지 알지만 콘솔에 인쇄되지 않는 이유는 완전히 설명하지 않습니다.

NSDictionary의 설명 메서드는 사전의 내용을 나타내는 문자열을 반환하며 속성 목록으로 형식이 지정됩니다. 이러한 큰 사전의 경우 전체 내용을 기록하며 100,000 개의 레코드 순서로 기록됩니다.

내가 po [[dictionaryMutableOfSynsetDictionaries description] substringToIndex:1000] 일 경우 처음 1000자를 표시합니다. 이 방법으로 줄이지 않으면 문자열을 작성하는 데 시간이 걸리고 콘솔에 표시하는 데 영원히 걸립니다.

문제가 발생한 줄 앞뒤에 log 문을 사용하여 이전 및 이후 로그가 인쇄되는 동안 내 질문의 log 문이 인쇄되지 않는지 확인했습니다. 그래서 NSLog가이를 버리고 있습니다.

+0

매우 긴 문자열을 겉으로보기에는 버려진 NSLog와 비슷한 문제가 있다고 생각합니다. 나는 더 이상 확인할 필요가 없지만이 문제가있는 유일한 것이 아니라는 것을 알고 있습니다. 그런 긴 문자열을 다루지 않는 콘솔 일 수도 있지만? –

+0

'po' 명령을 사용하면 콘솔이 그것을 처리하는 것 같습니다. 그러나이 경우에는 매우 긴 시간이 걸립니다. – Jim

관련 문제