2017-10-15 13 views
0

関数の平均経過時間を記録するタイマークラスを作成します。だから私は関数が実行された回数を保存したい。しかし辞書の項目は変更されません。NSMutableDictionaryのsetValue:forKeyが機能しない理由

は、ここに私のコードです:

@implementation Timer { 
    NSDate *startTime; 
    // NSString *item; 
    NSMutableDictionary *itemCounts; 
    NSMutableDictionary *itemTimes; 

} 

- (void)tic { 
    startTime = [NSDate date]; 
} 
- (void)tocWithMessage:(NSString*)message { 
    if (itemCounts[message] == nil) { 
     // itemCounts[message] = @1; 
     [itemCounts setValue:@1 forKey:message]; 
     NSLog(@"%d", [itemCounts[message] integerValue]); 
    } else { 
     itemCounts[message] = @([itemCounts[message] integerValue] + 1); 
    } 
    double totalTime = [itemTimes[message] doubleValue]; 
    double thisTime = -[startTime timeIntervalSinceNow] * 1000; 
    totalTime += thisTime; 
    itemTimes[message] = @(totalTime); 
    int count = [itemCounts[message] integerValue]; 
    double averageTime = totalTime/count; 
    NSLog(@"%@: No.%d, average time: %lfms", message, count, averageTime); 
    // std::cout << message << ": " << 1. * (clock() - timerTimestamp)/CLOCKS_PER_SEC * 1000 << "ms" << std::endl; 
} 

@end 

しかしitemCounts [メッセージ]は常にnilです。助けてください:)

ありがとうございます!

答えて

1

あなたは辞書を初期化するのを忘れていました。スウィフトでは、あなたがこのようにするとクラッシュを見たでしょう:)

+0

辞書が非オプションの;-)と宣言されている場合、Swiftではコンパイラエラーが発生します。 – vadian

1

あなたは辞書を宣言しました。

それらを使用する前に、あなたがどこかにそれらを初期化する必要があります。

itemCounts = [[NSMutableDictionary alloc] init]; 
itemTimes = [[NSMutableDictionary alloc] init]; 
関連する問題