1

我有一个 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模拟器上运行它。我会把更新的完成此更新后,我的应用程序包中的数据库。)

4

1 回答 1

0

现在我看到了可能发生的事情,但它并没有完全回答为什么它没有打印到控制台。

NSDictionary 的 description 方法返回一个表示字典内容的字符串,格式为属性列表。对于这么大的字典,它会记录全部内容,大约有 100,000 条记录。

当我这样做po [[dictionaryMutableOfSynsetDictionaries description] substringToIndex:1000]时,它将显示前 1000 个字符。如果我不以这种方式缩短它,则组合字符串需要一段时间,然后需要永远呈现到控制台。

我确实在问题行之前和之后使用日志语句确认我的问题中的日志语句没有打印,而之前和之后的日志被打印。所以 NSLog 把它扔掉了,我想。

于 2012-11-25T06:14:56.960 回答