我有一个NSMutableDictionary,里面有一到四个对象。每个包含的对象都是NSDictionary。第一个字典包含大约83,000个NSManagedObjects的引用。第二个字典包含大约14,000个相同类型的对象。
在下面的代码中,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模拟器上运行它.I& #39;完成此更新后,将更新的数据库放入我的应用程序包中。)
答案 0 :(得分:0)
现在我看到可能会发生什么,但它并没有完全回答为什么它没有打印到控制台。
NSDictionary的描述方法返回一个字符串,该字符串表示字典的内容,格式为属性列表。对于这么大的字典,它会记录整个内容,大约有100,000条记录。
当我po [[dictionaryMutableOfSynsetDictionaries description] substringToIndex:1000]
时,它会显示前1000个字符。如果我不以这种方式缩短它,那么编写字符串需要一段时间,然后它需要永远呈现给控制台。
我确实在问题行之前和之后用日志语句确认我的问题中的日志语句没有打印,而打印前后日志。因此,我认为NSLog正在抛弃它。