1 つから 4 つのオブジェクトを含む NSMutableDictionary があります。含まれている各オブジェクトは NSDictionary です。最初のディクショナリには、NSManagedObjects への約 83,000 の参照が含まれています。2 番目のディクショナリには、約 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);
の値を変えてこのコードを 4 回繰り返しますがpos
、そのたびに、最上位のdictionaryMutableOfSynsetDictionaries
辞書の説明を出力する NSLog が出力されません。「[dictionaryMutableOfSynsetDictionaries description]」を文字列定数に置き換えると、出力されます。
ここで何が起きてるの?これは予期された動作ですか、それとも何か間違ったことをしていますか?
(このコードは、大規模な辞書とともに、大規模な sqlite データベースの関係リンクを完成させるために使用されており、デプロイ可能なコードでは使用されません。iOS シミュレーターのみで実行しています。更新したものを配置します。この更新が完了すると、アプリ バンドルにデータベースが追加されます)。